|
1、設(shè)計(jì)窗口類
2、注冊(cè)窗口
3、創(chuàng)建窗口
4、顯示窗口與更新窗口
5、消息循環(huán)
6、窗口函數(shù)
1.設(shè)計(jì)窗口
typedef struct tagWNDCLASS {
UINT style; //窗口的樣式
WNDPROC lpfnWndProc; //名回調(diào)函數(shù)的名字
int cbClsExtra; //窗口類無(wú)擴(kuò)展
int cbWndExtra; //窗口實(shí)例無(wú)擴(kuò)展
HINSTANCE hInstance; //當(dāng)前實(shí)例句柄
HICON hIcon; //窗口的圖標(biāo)
HCURSOR hCursor; //光標(biāo)的形狀與類型
HBRUSH hbrBackground; //窗口的背景
LPCSTR lpszMenuName; //設(shè)定菜單
LPCSTR lpszClassName; //設(shè)定窗口名字(類名)
} WNDCLASS, *PWNDCLASSA, NEAR *NPWNDCLASSA, FAR *LPWNDCLASSA;
注:以上是設(shè)計(jì)窗口的一個(gè)結(jié)構(gòu)體 ,
作用是確定窗口的 。
圖標(biāo)、窗口樣式、回調(diào)函數(shù)、背景、光標(biāo)、類名等屬性
2.注冊(cè)窗口
RegisterClass(&XXX);
注:XXX代表 某某某設(shè)計(jì)窗口的結(jié)構(gòu)體名+“&”是取地址
作用是導(dǎo)入內(nèi)存
3.創(chuàng)建窗口
CreaeWindow 創(chuàng)建窗口函數(shù)原型
HWND CreateWindow(
LPCTSTR lpClassName, //窗口類名(與設(shè)計(jì)函數(shù)的類名相同)
LPCTSTR lpWindowName, //窗口標(biāo)題
DWORD dwStyle, //窗口樣式,多種樣式
int x, //x坐標(biāo) (屏幕坐標(biāo))
int y, //Y坐標(biāo)(屏幕坐標(biāo))
int nWidth, //寬
int nHeight, //高
HWND hWndParent, //父窗口
HMENU hMenu, //加載菜單的句柄
HANDLE hlnstance, //創(chuàng)建此窗口的應(yīng)用程序的當(dāng)前句柄(PID)(也是設(shè)計(jì)窗口中的.hInstance)
LPVOID lpParam // 這個(gè)一般是NULL。不用的
);
注:以上是一個(gè)創(chuàng)建窗口的函數(shù) <CreaeWindow>創(chuàng)建窗口后
函數(shù)會(huì)返回一個(gè)句柄 這時(shí)要用一個(gè) 窗口句柄類型(HWND)
的變量來(lái)接收這個(gè)返回值。
作用是確定:
窗口的 標(biāo)題、窗口樣式、窗口位置、窗口大小、菜單、父窗口等等。
4、顯示窗口與更新窗口
顯示窗口
ShowWindow(XXXX, //第一個(gè)參數(shù)是 窗口句柄(HWND)
SW_SHOW //指定窗口如何顯示
);
更新窗口
UpdateWindow(hWnd //窗口句柄
);
5、消息循環(huán)
下面是代碼:
MSG msg; //聲明消息結(jié)構(gòu)
while(GetMessage(&msg,NULL,0,0)) //消息循環(huán)
{
TranslateMessage(&msg); //讓W(xué)indows為與鍵盤相關(guān)的消息做一些轉(zhuǎn)換
DispatchMessage(&msg); //分派消息到窗口過(guò)程函數(shù)中對(duì)消息處理
}
6、窗口函數(shù)
//窗口過(guò)程函數(shù)的實(shí)現(xiàn)(消息處理函數(shù))
LRESULT CALLBACK MyWindowProc(
HWND hwnd, // handle to window 窗口句柄
UINT uMsg, // message identifier消息標(biāo)識(shí)
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_PAINT:
{
TCHAR str[] = _T("這是一個(gè)Windows的SDK程序!");
HDC hDc;//聲明HDC數(shù)據(jù)結(jié)構(gòu)
PAINTSTRUCT Ps;
hDc = BeginPaint(hwnd,&Ps); //獲取設(shè)備環(huán)境句柄
SetTextColor(hDc,RGB(13,25,200)); //設(shè)置文本顏色
TextOut(hDc,0,0,str,18); //輸出文字
EndPaint(hwnd,&Ps); //釋放資源
break;
}
case WM_CLOSE: //點(diǎn)擊"X"按鈕時(shí)發(fā)送此消息,使消息循環(huán)停止
if(IDYES == MessageBox(hwnd,_T("是否要退出?"),_T("提示"),MB_YESNO))
{
DestroyWindow(hwnd); //銷毀窗口,發(fā)送WM_DESTROY消息,注意程序進(jìn)程還沒退出
}
break;
case WM_DESTROY:
PostQuitMessage(NULL); //進(jìn)程結(jié)束,完全退出程序
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,_T("鼠標(biāo)左鍵按下"),_T("提示"),MB_OK);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam); //處理未處理的消息
break;
}
return 0;
}
|
|