函數(shù)功能:
CreateWindow 函數(shù)創(chuàng)建一個(gè)重疊式窗口献雅、彈出式窗口或子窗口碉考。它指定窗口類(lèi),窗口標(biāo)題挺身,窗口風(fēng)格侯谁,以及窗口的初始位置及大小(可選的)章钾。函數(shù)也指該窗口的父窗口或所屬窗口(如果存在的話(huà))墙贱,及窗口的菜單。
若要使用除 CreateWindow 函數(shù)支持的風(fēng)格外的擴(kuò)展風(fēng)格贱傀,則使用 CreateWindowEx 函數(shù)代替 CreateWindow 函數(shù)惨撇。
API 函數(shù)原型:
注釋?zhuān)篲In_ 說(shuō)明該參數(shù)是輸入的,_opt_ 說(shuō)明該參數(shù)是可選參數(shù)府寒。
HWND WINAPI CreateWindow(
_In_opt_??LPCTSTR lpClassName,? ? // 窗口類(lèi)名稱(chēng)
_In_opt_??LPCTSTR lpWindowName,? ?// 窗口標(biāo)題
_In_? ?? ?DWORD dwStyle,? ?? ?? ? // 窗口風(fēng)格魁衙,或稱(chēng)窗口格式
_In_? ?? ?int x,? ?? ?? ?? ?? ?? ?// 初始 x 坐標(biāo)
_In_? ?? ?int y,? ?? ?? ?? ?? ?? ?// 初始 y 坐標(biāo)
_In_? ?? ?int nWidth,? ?? ?? ?? ? // 初始 x 方向尺寸
_In_? ?? ?int nHeight,? ?? ?? ?? ?// 初始 y 方向尺寸
_In_opt_??HWND hWndParent,? ?? ???// 父窗口句柄
_In_opt_??HMENU hMenu,? ?? ?? ?? ?// 窗口菜單句柄
_In_opt_??HINSTANCE hInstance,? ? // 程序?qū)嵗浔?/p>
_In_opt_??LPVOID lpParam? ?? ?? ? // 創(chuàng)建參數(shù)
);
參數(shù)解析:
參數(shù)含義
lpClassName
1. 窗口類(lèi)名稱(chēng),可以是一個(gè)指向 NULL 結(jié)束的字符串或一個(gè)整型數(shù)值
2. 如果是字符串株搔,它指定了窗口的類(lèi)名剖淀。這個(gè)類(lèi)名可以是任何用函數(shù) RegisterClass 注冊(cè)的類(lèi)名,或是任何預(yù)定義的控制類(lèi)名
3. 如是一個(gè)整型量纤房,它是由此前調(diào)用 theGlobalAddAtom 函數(shù)產(chǎn)生的全局量祷蝌。這個(gè)小于 0xC000 的 16 位數(shù)必須是 lpClassName 參數(shù)字的低 16 位,該參數(shù)的高位必須是 0
lpWindowName
1. 窗口標(biāo)題帆卓,一個(gè)指向 NULL 結(jié)束的字符串指針
2. 如果窗口風(fēng)格指定了標(biāo)題條巨朦,由 lpWindowName 指向的窗口標(biāo)題將顯示在標(biāo)題條上
3. 當(dāng)使用 Createwindow 函數(shù)來(lái)創(chuàng)建控制例如按鈕,選擇框和靜態(tài)控制時(shí)剑令,可使用 lpWindowName 來(lái)指定控制文本
dwStyle
指定創(chuàng)建窗口的風(fēng)格(詳見(jiàn)下方↓)
x:1. 指定窗口的初始水平位置(x 坐標(biāo))
2. 對(duì)一個(gè)層疊或彈出式窗口糊啡,x 參數(shù)是屏幕坐標(biāo)系的窗口的左上角的初始 x 坐標(biāo)
3. 對(duì)于子窗口,x 是子窗口左上角相對(duì)父窗口客戶(hù)區(qū)左上角的初始 x 坐標(biāo)
4. 如果該參數(shù)被設(shè)為 CW_USEDEFAULT 則系統(tǒng)為窗口選擇缺省的左上角坐標(biāo)并忽略 y 參數(shù)吁津,CW_USEDEFAULT 只對(duì)層疊窗口有效棚蓄,如果為彈出式窗口或子窗口設(shè)定,則 x 和 y 參數(shù)被設(shè)為零碍脏。
y:1. 指定窗口的初始垂直位置(y 坐標(biāo))
2. 對(duì)一個(gè)層疊或彈出式窗口梭依,y 參數(shù)是屏幕坐標(biāo)系的窗口的左上角的初始 y 坐標(biāo)
3. 對(duì)于子窗口,y 是子窗口左上角相對(duì)父窗口客戶(hù)區(qū)左上角的初始 y 坐標(biāo)
4. 對(duì)于列表框典尾,y 是列表框客戶(hù)區(qū)左上角相對(duì)父窗口客戶(hù)區(qū)左上角的初始 y 坐標(biāo)
5. 如果層疊窗口是使用 WS_VISIBLE 風(fēng)格位創(chuàng)建的并且 x 參數(shù)被設(shè)為 CW_USEDEFAULT役拴,則系統(tǒng)將忽略 y 參數(shù)
nWidth1. 以設(shè)備單元指明窗口的寬度
2. 對(duì)于層疊窗口,nWidth 的值或是屏幕坐標(biāo)的窗口寬度或是 CW_USEDEFAULT
3. 若 nWidth 是 CW_USEDEFAULT钾埂,則系統(tǒng)為窗口選擇一個(gè)默認(rèn)的高度和寬度(默認(rèn)寬度為從初始 x 坐標(biāo)開(kāi)始到屏幕的右邊界河闰,缺省高度為從初始 y 坐標(biāo)開(kāi)始到目標(biāo)區(qū)域的頂部。)褥紫,CW_USEDEFAULT 只對(duì)層疊窗口有效姜性,如果為彈出式窗口和子窗口設(shè)定 CW_USEDEFAULT 標(biāo)志則 nWidth 和 nHeight 被設(shè)為零
nHeight1. 以設(shè)備單元指明窗口的高度
2. 對(duì)于層疊窗口,nHeight 是屏幕坐標(biāo)的窗口寬度
3. 若 nWidth 被設(shè)為 CW_USEDEFAULT髓考,則系統(tǒng)忽略 nHeight 參數(shù)部念,自動(dòng)為 nWidth 和 nHeight 設(shè)置默認(rèn)參數(shù)
hWndParent
1. 指向被創(chuàng)建窗口的父窗口或所有者窗口的句柄
2. 若要?jiǎng)?chuàng)建一個(gè)子窗口或一個(gè)從屬窗口,需提供一個(gè)有效的窗口句柄
3. 創(chuàng)建一個(gè)單純的消息窗口氨菇,可以提供 HWND_MESSAGE 或提供一個(gè)己存在的消息窗口的句柄
hMenu
1. 指向窗口菜單句柄儡炼,或依據(jù)窗口風(fēng)格指明一個(gè)子窗口標(biāo)識(shí)
2. 對(duì)于層疊或彈出式窗口,hMenu 指定窗口使用的菜單:如果使用了菜單類(lèi)门驾,則 hMenu 可以為 NULL
3. 對(duì)于子窗口射赛,hMenu 指定了該子窗口標(biāo)識(shí)(一個(gè)整型量),一個(gè)對(duì)話(huà)框使用這個(gè)整型值將事件通知父類(lèi)奶是。應(yīng)用程序確定子窗口標(biāo)識(shí)楣责,這個(gè)值對(duì)于相同父窗口的所有子窗口必須是唯一的
hInstance與窗口相關(guān)聯(lián)的模塊實(shí)例的句柄
lpParam
1. 指向一個(gè)值的指針,該值傳遞給窗口 WM_CREATE 消息聂沙。該值通過(guò)在 IParam 參數(shù)中的 CREATESTRUCT 結(jié)構(gòu)傳遞
2. 如果應(yīng)用程序調(diào)用 CreateWindow 創(chuàng)建一個(gè) MDI 客戶(hù)窗口秆麸,則 lpParam 必須指向一個(gè) CLIENTCREATESTRUCT 結(jié)構(gòu)
dwStyle 窗口風(fēng)格解析
窗口風(fēng)格含義
WS_BORDER創(chuàng)建一個(gè)帶邊框的窗口
WS_CAPTION創(chuàng)建一個(gè)有標(biāo)題框的窗口(包含了 WS_BODER 風(fēng)格)
WS_CHILD創(chuàng)建一個(gè)子窗口,這個(gè)風(fēng)格的窗口不能擁有菜單也不能與 WS_POPUP 風(fēng)格合用
WS_CHILDWINDOW與 WS_CHILD 相同
WS_CLIPCHILDREN當(dāng)在父窗口內(nèi)繪圖時(shí)及汉,排除子窗口區(qū)域沮趣,在創(chuàng)建父窗口時(shí)使用這個(gè)風(fēng)格
WS_CLIPSIBLINGS1. 排除子窗口之間的相對(duì)區(qū)域,也就是坷随,當(dāng)一個(gè)特定的窗口接收到 WM_PAINT 消息時(shí)房铭,WS_CLIPSIBLINGS 風(fēng)格將所有層疊窗口排除在繪圖之外驻龟,只重繪指定的子窗口
2. 如果未指定該風(fēng)格,并且子窗口是層疊的缸匪,則在重繪子窗口的客戶(hù)區(qū)時(shí)翁狐,就會(huì)重繪鄰近的子窗口
WS_DISABLED1. 創(chuàng)建一個(gè)初始狀態(tài)為禁止的子窗口,一個(gè)禁止?fàn)顟B(tài)的窗口不能接受來(lái)自用戶(hù)的輸入信息
2. 在窗口創(chuàng)建之后凌蔬,可以調(diào)用 EnableWindow 函數(shù)來(lái)啟用該窗口
WS_DLGFRAME創(chuàng)建一個(gè)帶對(duì)話(huà)框邊框風(fēng)格的窗口露懒,這種風(fēng)格的窗口不能帶標(biāo)題條
WS_GROUP1. 指定一組“控制窗口”的第一個(gè)“控制窗口”
2. 這個(gè)“控制窗口”組由第一個(gè)“控制窗口”和隨后定義的“控制窗口”組成,自第二個(gè)“控制窗口”開(kāi)始每個(gè)“控制窗口”具有 WS_GROUP 風(fēng)格
3. 每個(gè)組的第一個(gè)“控制窗口”帶有 WS_TABSTOP 風(fēng)格砂心,從而使用戶(hù)可以在組間移動(dòng)
4. 用戶(hù)隨后可以使用光標(biāo)在組內(nèi)的控制間改變鍵盤(pán)焦點(diǎn)
WS_HSCROLL創(chuàng)建一個(gè)有水平滾動(dòng)條的窗口
WS_ICONIC創(chuàng)建一個(gè)初始狀態(tài)為最小化狀態(tài)的窗口懈词,與 WS_MINIMIZE 風(fēng)格相同
WS_MAXIMIZE創(chuàng)建一個(gè)初始狀態(tài)為最大化狀態(tài)的窗口
WS_MAXIMIZEBOX創(chuàng)建一個(gè)具有最大化按鈕的窗口,該風(fēng)格不能與 WS_EX_CONTEXTHELP 風(fēng)格同時(shí)出現(xiàn)辩诞,同時(shí)必須指定 WS_SYSMENU 風(fēng)格
WS_MINIMIZE創(chuàng)建一個(gè)初始狀態(tài)為最小化狀態(tài)的窗口坎弯,與 WS_ICONIC 風(fēng)格相同
WS_MINIMIZEBOX創(chuàng)建一個(gè)具有最小化按鈕的窗口,該風(fēng)格不能與 WS_EX_CONTEXTHELP 風(fēng)格同時(shí)出現(xiàn)躁倒,同時(shí)必須指定 WS_SYSMENU 風(fēng)格
WS_OVERLAPPED產(chǎn)生一個(gè)層疊的窗口荞怒,一個(gè)層疊的窗口有一個(gè)標(biāo)題條和一個(gè)邊框,與 WS_TILED 風(fēng)格相同
WS_OVERLAPPEDWINDOW相當(dāng)于(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX)秧秉,與 WS_TILEDWINDOW 風(fēng)格相同
WS_POPUP創(chuàng)建一個(gè)彈出式窗口褐桌,該風(fēng)格不能與 WS_CHILD 風(fēng)格同時(shí)使用。
WS_POPUPWINDOW相當(dāng)于(WS_POPUP | WS_BORDER | WS_SYSMENU)象迎,但 WS_CAPTION 和 WS_POPUPWINDOW 必須同時(shí)設(shè)定才能使窗口某單可見(jiàn)
WS_SIZEBOX創(chuàng)建一個(gè)可調(diào)邊框的窗口荧嵌,與 WS_THICKFRAME 風(fēng)格相同
WS_SYSMENU創(chuàng)建一個(gè)在標(biāo)題條上帶有窗口菜單的窗口,必須同時(shí)設(shè)定 WS_CAPTION 風(fēng)格
WS_TABSTOP1. 創(chuàng)建一個(gè)“控制窗口”砾淌,在用戶(hù)按下 Tab 鍵時(shí)可以獲得鍵盤(pán)焦點(diǎn)啦撮。
2. 按下 Tab 鍵后使鍵盤(pán)焦點(diǎn)轉(zhuǎn)移到下一具有 WS_TABSTOP 風(fēng)格的“控制窗口”
WS_THICKFRAME創(chuàng)建一個(gè)具有可調(diào)邊框的窗口,與 WS_SIZEBOX 風(fēng)格相同
WS_TILED產(chǎn)生一個(gè)層疊的窗口汪厨,一個(gè)層疊的窗口有一個(gè)標(biāo)題和一個(gè)邊框赃春,與 WS_OVERLAPPED 風(fēng)格相同
WS_TILEDWINDOW相當(dāng)于(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX),與 WS_OVERLAPPEDWINDOW 風(fēng)格相同
WS_VISIBLE創(chuàng)建一個(gè)初始狀態(tài)為可見(jiàn)的窗口
WS_VSCROLL創(chuàng)建一個(gè)有垂直滾動(dòng)條的窗口
返回值:
1. 如果函數(shù)成功劫乱,返回值為新窗口的句柄织中;
2. 如果函數(shù)失敗,返回值為 NULL衷戈。