在學校一直作linux開發,工做作windows開發。今天看了一下最基本的windows API窗體編程。API是基於函數的,C語言。對這種風格的第一次接觸,仍是在linux上使用MiniGUI開發的時候。linux
在這個過程 中,分爲兩部分,一是結構體,二是函數(可能還有一些宏定義)。對於事件的處理都是經過向窗體註冊一個回調函數,回調函數有四個參數,分別爲窗體資源標識符,事件ID,以及兩個事件參數。編程
結構體:windows
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;其包含了對窗體的配置參數(類型,圖標,菜單等等),其中包括了須要註冊的回調函數。
回調函數完成對事件的處理,其通常內容爲:函數
switch(TYPE) {spa
case TYPE_1:命令行
do_1(...);設計
break;code
case TYPE_2:事件
do_2(...);資源
break;
...
...
...
default:
return define_do(_1,_2,_3,_4);
return 0;
}
在C/C++中程序入口爲main(int argc, char* argv[]),而在此爲WinMain,其有四個參數,分別爲APP當前實例,APP先前的實例,命令行,和窗體的顯示狀態。
一個窗體的建立分爲四個步驟:
1.設計窗體
2.註冊窗體
3.生成窗體
4.顯示及更新窗體
第一步,對WNDCLASS進行參數配置,第二調用RegisterClass函數註冊,第三調用CreateWindow生成,最後調用ShowWindow顯示,調用UpdateWindow更新窗體。在這應該注意RegisterClass,每產生不一樣的窗體必須從新註冊。
窗體的繪製完成後則須要事件進行捕捉。
通常形式爲:
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
具體處理在前述的回調函數中。