Windows窗口創建

Windows窗口創建流程:

1、創建入口函數WinMain()

2、註冊窗口類

3、實現回調函數功能

4、顯示窗口

5、更新窗口

6、消息循環

 

回調函數爲WinProc,具體定義如下:

LRESULT CALLBACK WinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam )

函數解析爲:

1、每個窗口會有一個稱爲窗口過程的回調函數(WndProc),它帶有四個參數,分別爲:

窗口句柄(Window Handle) HWND,

消息ID(Message ID) UINT,

和兩個消息參數(wParam, lParam)WPARAM、LPARAM,

WndProc的第一個參數hWnd就是當前接收消息的窗口句柄,第二個參數就是被傳送過來的消息,第三、第四個參數都是附加在消息上的數據,這和MSG結構體是一樣的。

2、LRESULT結構體爲:

LRESULT CALLBACK WinProc( //WinProc名稱可自由定義

    HWND hwnd,

    UINT uMsg,

    WPARAM wParam,

    LPARAM lParam

)

LRESULT爲窗口程序(WinProc)指針。

//創建入口函數
int WINAPI WinMain(
 HINSTANCE hInstance,  		//應用程序當前實例的句柄。
 HINSTANCE hPrevInstance,	//應用程序的先前實例的句柄。對於同一個程序打開兩次,出現兩個窗口第一次打開的窗口就是先前實例的窗口。對於一個32位程序,該參數總爲NULL。
 LPSTR lpCmdLine,			//指向應用程序命令行的字符串的指針,不包括執行文件名。
 int ShowCmd				//指明窗口如何顯示,具有不同參數
 )
{
HWND hWnd=0;
MSG nMsg={0};
/*
MSG:消息結構體
typedef struct tagMSG {
  HWND hwnd;		//消息所屬的窗口
  UINT message;		//消息的標識符, 爲WM_XXX宏
  WPARAM wParam;	//wParam和lParam,用於指定消息的附加信息
  LPARAM lParam;
  DWORD time;		//消息投遞到消息隊列中的時間
  POINT pt;			//鼠標的當前位置
 } MSG;
*/

//註冊窗口類
WNDCLASS cs={0};
/*
WNDCLASS:窗口信息結構體
typedef struct _WNDCLASS {
UINT style;// 窗口類型
WNDPROC lpfnWndProc;//窗口處理函數
int cbClsExtra;//窗口擴展
int cbWndExtra;//窗口實例擴展
HINSTANCE hInstance;//實例句柄
HICON hIcon;//窗口的最小化圖標
HCURSOR hCursor;//窗口鼠標光標
HBRUSH hbrBackground;//窗口背景色
LPCTSTR lpszMenuName;//窗口菜單
LPCTSTR lpszClassName;// 窗口類名
} WNDCLASS, *LPWNDCLASS;

*/
cs.cbClsExtra=0;
cs.cbWndExtra=0;
cs.hbrBackground=(HBRUSH)(COLOR_WINDOW+2);
cs.hCursor=NULL;
cs.hIcon=NULL;
cs.hInstance=hInstance;
cs.lpfnWndProc=(WNDPROC)WinProc;
cs.lpszClassName="Main";
cs.lpszMenuName=NULL;
cs.style=CS_VREDRAW|CS_HREDRAW;

RegisterClass(&cs);//實現註冊窗口

//創建窗口
hWnd=CreateWindow("Main","Windows",WS_OVERLAPPEDWINDOW,200,200,500,500,NULL,NULL,hInstance,NULL);
/*
  CreateWindow函數參數解析:
HWND WINAPI CreateWindow(
_In_opt_  LPCTSTR lpClassName,      // 窗口類名稱
_In_opt_  LPCTSTR lpWindowName,  // 窗口標題
_In_      DWORD dwStyle,                // 窗口風格,或稱窗口格式
_In_      int x,                                 // 初始 x 座標
_In_      int y,                                 // 初始 y 座標
_In_      int nWidth,                        // 初始 x 方向尺寸
_In_      int nHeight,                       // 初始 y 方向尺寸
_In_opt_  HWND hWndParent,        // 父窗口句柄
_In_opt_  HMENU hMenu,               // 窗口菜單句柄
_In_opt_  HINSTANCE hInstance,    // 程序實例句柄
_In_opt_  LPVOID lpParam              // 創建參數
);
*/


//顯示窗口
ShowWindow(hWnd,SW_SHOW);

//更新窗口
UpdateWindow(hWnd);

//消息循環
while(GetMessage(&nMsg,0,NULL,NULL))
{
TranslateMessage(&nMsg);
DispatchMessage(&nMsg);
}
return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章