怎樣記住WNDCLASS(EX)結(jié)構(gòu)和CreateWindow(Ex)參數(shù)
Windows圖形編程最先遇到的就是WNDCLASS(EX)結(jié)構(gòu)和CreateWindow(Ex)函數(shù),都有一堆東西要記。雖然有IDE可以自動生成一個模板,或者有智能提示,我還是喜歡自己寫,我喜歡從底層把握一切細節(jié)。Windows的編程其實很簡潔的,函數(shù)名稱也比較直觀,就是有一些大的結(jié)構(gòu)或函數(shù)很難記(極少數(shù)),例如Direct3D就要用D3DPRESENT_PARAMETERS,創(chuàng)建字體的LOGFONT結(jié)構(gòu)等。不過用多了也就熟悉了,而且這些結(jié)構(gòu)一般都有些規(guī)律。
其實WNDCLASS結(jié)構(gòu)還比較好記,總共有10個成員,可以簡稱為1,2,3,4,分別為:
1個style;
2個cb(count byte),分別是cbClsExtra和cbWndExtra;
3個lp(long pointer),lpfnWndProc,lpszClassName,lpszMenuName;
4個h(handle),分別是hbrBackground, hIcon, hCursor, hInstance;
后來的WNDCLASSEX結(jié)構(gòu)比原版多了兩個:cbSize(結(jié)構(gòu)本身大小),hIconSm(小圖標)。關(guān)于小圖標,其實Petzold在其經(jīng)典著作中說這個WNDCLASSEX很奇怪,因為增加的兩個成員用處都不大。ico文件本來就可以存儲兩個圖標,一大一小,Windows可以根據(jù)情況選擇合適的圖標;但是又添了一個hIconSm,既要額外創(chuàng)建文件,又要手工指定,實在是費力不討好,所以他就建議,直接用WNDCLASS算了,不要用這個EX的東西。其實MSDN的文檔也說了,如果不需要指定小圖標,還是用原來的吧,沒啥影響。
CreateWindow也有不少參數(shù),我一般寫成四行
1. LPCTSTR lpClassName, LPCTSTR lpWindowName, //這行是窗口類名,窗口Title:指定你想創(chuàng)建什么窗口和窗口的標題
2. DWORD dwStyle, //這行是窗口的Style:細節(jié)問題
3. int x, int y, int nWidth, int nHeight, //這行是窗口的Dimension,或者Geometry,即位置和大小:不用多說
4. HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam //這行是父窗口句柄,菜單句柄(或控件ID),實例句柄,額外參數(shù):一堆句柄
CreateWindowEx只在最前面多了一個參數(shù)DWORD dwExStyle,但這個擴展的Style特別重要,因為很多種類的窗口只有通過這個才能創(chuàng)建,比如透明窗口、工具窗口、置頂窗口、多文檔界面(MDI)窗口等,一般做游戲的都要使用擴展Style(全屏窗口)。所以創(chuàng)建窗口時還是推薦使用Ex版本,一般情況第一個參數(shù)傳0就行了。

浙公網(wǎng)安備 33010602011771號