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