API:CreateWindow詳解
函數(shù)功能:該函數(shù)創(chuàng)建一個重疊式窗口、彈出式窗口或子窗口。它指定窗口類,窗口標題,窗口風(fēng)格,以及窗口的初始位置及大?。蛇x的)。該函數(shù)也指定該窗口的父窗口或所屬窗口(如果存在的話),及窗口的菜單。若要使用除CreateWindow函數(shù)支持的風(fēng)格外的擴展風(fēng)格,則使用CreateWindowEx函數(shù)代替CreateWindow函數(shù)。
函數(shù)原型:HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD dwStyle,int x,int y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HANDLE hlnstance,LPVOID lpParam);
參數(shù):
lpClassName:指向一個空結(jié)束的字符串或整型數(shù)atom。如果該參數(shù)是一個整型量,它是由此前調(diào)用theGlobalAddAtom函數(shù)產(chǎn)生的全局量。這個小于0xC000的16位數(shù)必須是lpClassName參數(shù)字的低16位,該參數(shù)的高位必須是0。
如果lpClassName是一個字符串,它指定了窗口的類名。這個類名可以是任何用函數(shù)RegisterClassEx注冊的類名,或是任何預(yù)定義的控制類名。請看說明部分的列表。
LPWindowName:指向一個指定窗口名的空結(jié)束的字符串指針。
如果窗口風(fēng)格指定了標題條,由lpWindowName指向的窗口標題將顯示在標題條上。當(dāng)使用Createwindow函數(shù)來創(chuàng)建控制例如按鈕,選擇框和靜態(tài)控制時,可使用lpWindowName來指定控制文本。
dwStyle:指定創(chuàng)建窗口的風(fēng)格。該參數(shù)可以是下列窗口風(fēng)格的組合再加上說明部分的控制風(fēng)格。風(fēng)格意義:
WS_BORDER:創(chuàng)建一個單邊框的窗口。
WS_CAPTION:創(chuàng)建一個有標題框的窗口(包括WS_BODER風(fēng)格)。
WS_CHILD:創(chuàng)建一個子窗口。這個風(fēng)格不能與WS_POPUP風(fēng)格合用。
WS_CHLDWINDOW:與WS_CHILD相同。
WS_CLIPCHILDREN:當(dāng)在父窗口內(nèi)繪圖時,排除子窗口區(qū)域。在創(chuàng)建父窗口時使用這個風(fēng)格。
WS_CLlPBLINGS;排除子窗口之間的相對區(qū)域,也就是,當(dāng)一個特定的窗口接收到WM_PAINT消息時,WS_CLIPSIBLINGS 風(fēng)格將所有層疊窗口排除在繪圖之外,只重繪指定的子窗口。如果未指定WS_CLIPSIBLINGS風(fēng)格,并且子窗口是層疊的,則在重繪子窗口的客戶區(qū)時,就會重繪鄰近的子窗口。
WS_DISABLED:創(chuàng)建一個初始狀態(tài)為禁止的子窗口。一個禁止狀態(tài)的窗日不能接受來自用戶的輸入信息。
WS_DLGFRAME:創(chuàng)建一個帶對話框邊框風(fēng)格的窗口。這種風(fēng)格的窗口不能帶標題條。
WS_GROUP:指定一組控制的第一個控制。這個控制組由第一個控制和隨后定義的控制組成,自第二個控制開始每個控制,具有WS_GROUP風(fēng)格,每個組的第一個控制帶有WS_TABSTOP風(fēng)格,從而使用戶可以在組間移動。用戶隨后可以使用光標在組內(nèi)的控制間改變鍵盤焦點。
WS_HSCROLL:創(chuàng)建一個有水平滾動條的窗口。
WS_ICONIC:創(chuàng)建一個初始狀態(tài)為最小化狀態(tài)的窗口。與WS_MINIMIZE風(fēng)格相同。
WS_MAXIMIZE:創(chuàng)建一個具有最大化按鈕的窗口。該風(fēng)格不能與WS_EX_CONTEXTHELP風(fēng)格同時出現(xiàn),同時必須指定WS_SYSMENU風(fēng)格。
WS_OVERLAPPED:產(chǎn)生一個層疊的窗口。一個層疊的窗口有一個標題條和一個邊框。與WS_TILED風(fēng)格相同。
WS_OVERLAPPEDWINDOW:創(chuàng)建一個具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXMIZEBOX風(fēng)格的層疊窗口,與WS_TILEDWINDOW風(fēng)格相同。
WS_POPUP;創(chuàng)建一個彈出式窗口。該風(fēng)格不能與WS_CHLD風(fēng)格同時使用。
WS_POPUWINDOW:創(chuàng)建一個具有WS_BORDER,WS_POPUP,WS_SYSMENU風(fēng)格的窗口,WS_CAPTION和WS_POPUPWINDOW必須同時設(shè)定才能使窗口某單可見。
WS_SIZEBOX:創(chuàng)建一個可調(diào)邊框的窗口,與WS_THICKFRAME風(fēng)格相同。
WS_SYSMENU:創(chuàng)建一個在標題條上帶有窗口菜單的窗口,必須同時設(shè)定WS_CAPTION風(fēng)格。
WS_TABSTOP:創(chuàng)建一個控制,這個控制在用戶按下Tab鍵時可以獲得鍵盤焦點。按下Tab鍵后使鍵盤焦點轉(zhuǎn)移到下一具有WS_TABSTOP風(fēng)格的控制。
WS_THICKFRAME:創(chuàng)建一個具有可調(diào)邊框的窗口,與WS_SIZEBOX風(fēng)格相同。
WS_TILED:產(chǎn)生一個層疊的窗口。一個層疊的窗口有一個標題和一個邊框。與WS_OVERLAPPED風(fēng)格相同。
WS_TILEDWINDOW:創(chuàng)建一個具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU MS_THICKFRAME.
WS_MINIMIZEBOX,WS_MAXMIZEBOX風(fēng)格的層疊窗口。與WS_OVERLAPPEDWINDOW風(fēng)格相同。
WS_VISIBLE:創(chuàng)建一個初始狀態(tài)為可見的窗口。WS_VSCROLL:創(chuàng)建一個有垂直滾動條的窗口。
X:指定窗口的初始水平位置。對一個層疊或彈出式窗口,X參數(shù)是屏幕坐標系的窗口的左上角的初始X坐標。對于子富口,x是子窗口左上角相對父窗口客戶區(qū)左上角的初始X坐標。如果該參數(shù)被設(shè)為CW_UCEDEFAULT則系統(tǒng)為窗口選擇缺省的左上角坐標并忽略Y參數(shù)。CW_USEDEFAULT只對層疊窗口有效,如果為彈出式窗口或子窗口設(shè)定,則X和y參數(shù)被設(shè)為零。
Y:指定窗口的初始垂直位置。對一個層疊或彈出式窗日,y參數(shù)是屏幕坐標系的窗口的左上角的初始y坐標。對于子窗口,y是子窗口左上角相對父窗口客戶區(qū)左上角的初始y坐標。對于列表框,y是列表框客戶區(qū)左上角相對父窗口客戶區(qū)左上角的初始y坐標。如果層疊窗口是使用WS_VISIBLE風(fēng)格位創(chuàng)建的并且X參數(shù)被設(shè)為CW_USEDEFAULT,則系統(tǒng)將忽略y參數(shù)。
nWidth:以設(shè)備單元指明窗口的寬度。對于層疊窗口,nWidth或是屏幕坐標的窗口寬度或是CW_USEDEFAULT。若nWidth是CW_USEDEFAULT,則系統(tǒng)為窗口選擇一個缺省的高度和寬度:缺省寬度為從初始X坐標開始到屏幕的右邊界,缺省高度為從初始X坐標開始到目標區(qū)域的頂部。CW_USEDFEAULT只參層疊窗口有效;如果為彈出式窗口和子窗口設(shè)定CW_USEDEFAULT標志則nWidth和nHeight被設(shè)為零。
nHelght:以設(shè)備單元指明窗口的高度。對于層疊窗口,nHeight是屏幕坐標的窗口寬度。若nWidth被設(shè)為CW_USEDEFAULT,則系統(tǒng)忽略nHeight參數(shù)。
hWndParent:指向被創(chuàng)建窗口的父窗口或所有者窗口的旬柄。若要創(chuàng)建一個子窗口或一個被屬窗口,需提供一個有效的窗口句柄。這個參數(shù)對彈出式窗日是可選的。Windows NT 5.0;創(chuàng)建一個消息窗口,可以提供HWND_MESSAGE或提供一個己存在的消息窗口的句柄。
hMenu:菜單句柄,或依據(jù)窗口風(fēng)格指明一個子窗口標識。對于層疊或彈出式窗口,hMenu指定窗口使用的菜單:如果使用了菜單類,則hMenu可以為NULL。對于子窗口,hMenu指定了該子窗口標識(一個整型量),一個對話框使用這個整型值將事件通知父類。應(yīng)用程序確定子窗口標識,這個值對于相同父窗口的所有子窗口必須是唯一的。
hlnstance:與窗口相關(guān)聯(lián)的模塊事例的句柄。
lpParam:指向一個值的指針,該值傳遞給窗口 WM_CREATE消息。該值通過在IParam參數(shù)中的CREATESTRUCT結(jié)構(gòu)傳遞。如果應(yīng)用程序調(diào)用CreateWindow創(chuàng)建一個MDI客戶窗口,則lpParam必須指向一個CLIENTCREATESTRUCT結(jié)構(gòu)。
返回值:如果函數(shù)成功,返回值為新窗口的句柄:如果函數(shù)失敗,返回值為NULL。若想獲得更多錯誤信息,請調(diào)用GetLastError函數(shù)。
備注:在返回前,CreateWindow給窗口過程發(fā)送一個WM_CREATE消息。對于層疊,彈出式和子窗口,CreateWindow給窗口發(fā)送WM_CREATE,WM_GETMINMAXINFO和WM_NCCREATE消息。消息WM_CREATE的IParam參數(shù)包含一個指向CREATESTRUCT結(jié)構(gòu)的指針。如果指定了WS_VISIBLE風(fēng)格,CreateWindow向窗口發(fā)送所有需要激活和顯示窗口的消息。
獲取有關(guān)任務(wù)條是否為創(chuàng)建的窗口顯示一個按鈕的控制信息,參看Taskbar按鈕的Visbility。
以下預(yù)定義的控制類可以在lpClassName參數(shù)中指定。注意在dwStyle參數(shù)中可以使用的相應(yīng)的控制風(fēng)格。
BUTTON按鈕按鈕是一個小矩形子窗口,用戶可以點擊來打開或關(guān)閉。按鈕控制可以單獨使用或包含在組中使用,可以為控制寫標簽或不寫標簽。當(dāng)用戶點擊按鈕控制時按鈕的外觀有明顯的改變。請參看Button。查看dwStyle參數(shù)中指定的按鈕風(fēng)格表請參考Button Style。
COMBOBOX組合框由一個列表框和一個類似于編輯控制的選擇域組成。在使用這個風(fēng)格控制時,應(yīng)用程序或者使列表框一直顯示或者是作成一個下拉列表。如果列表框可見,則在編輯域中輸入字符將使列表框中與字符一致的第一個域高亮。反之,在列表框中選擇的項將顯示在編輯域中。請參看Combo Boxes。
查看dwStyle參數(shù)中指定的組合框風(fēng)格表請參考Combo Boxes Style。
EDIT編輯框一個小的矩形子窗口用戶可以使用鍵盤向其中輸入文本。用戶可以通過點擊或按Tab鍵來選中編輯框控制并且使控制獲得焦點。當(dāng)編輯框中顯示一個閃爍的插入記號時,用戶可以輸入文本。使用鼠標移動光標,選擇被替換的字符或設(shè)置插入字符的位置或使用回退鍵刪除字符。請參看Edit。controls。
查看dwStyle參數(shù)中指定的編輯框風(fēng)格的表格請參考Edit Control Style。
LISTBOX列表框字符串的列表。當(dāng)應(yīng)用程序必須顯示名稱的列表,例如文件名列表等,使用戶可以從中選擇時就可指定列表框。用戶可以通過單擊來選擇名稱。選擇時,被選擇名高亮,同時傳遞給父窗口一個通知消息。請參看LiSt Box Style。查看dwStyle參數(shù)中指定的列表風(fēng)格表請參考List BOX Control Style。
MDICLIENT MDI客戶設(shè)計出MDI客戶窗口。窗口接收控制MDI應(yīng)用程序子窗口的消息。建議使用兩種控制風(fēng)格位:WS_CLIPCHILDREN和WS_CHILD。指定了WS_HSCROLL和WS_VSCROLL風(fēng)格的MDI客戶窗口允許用戶將MDI子窗口滑動進入視窗。請參看MDI。
RiChEdit設(shè)計一個Rich Editl.0版的控制。該控制使用戶可以以字符和段落格式測覽和編輯文本,并且可以包含嵌入的COM對象。請參看Rich Edit Controls。查看dwStyle參數(shù)中指定的RichEdit風(fēng)格表請參考LiSt Box Control Style。
RICHEDIT CLASS設(shè)計一個Rich Edik2.0版的控制。該控制使用戶可以以字符和段落格式測覽和編輯文本,并且可以包含嵌入的COM對象。請參看RichEditControls。查看dwStyle參數(shù)中指定的RichEdit風(fēng)格表請參考RichEditControIStyle。
SCROLLBAR 滾動條設(shè)計的一個包含著一個滾動盒和兩端有方向箭頭的矩形。只要用戶點擊了控制,滾動條就給父窗口發(fā)送一個通知消息。如有必要,父窗口負責(zé)更新滾動條的位置。請參看ScrollBars。查看dwStyle參數(shù)中指定的滾動條風(fēng)格表請參考Scroll Bars Style。
STATIC一個簡單的靜態(tài)文本域,文本盒或矩形用于給控制加標簽,組合控制或?qū)⒖刂婆c其他控制分開。
靜態(tài)控制不提供輸入和也不提供輸出。請參看Static Control Styles。查看dwStyle參數(shù)中指定的靜態(tài)文本風(fēng)格表請參考Scroll Bars Style。
Windows95:系統(tǒng)可以支持最大16,364個窗口句柄。
備注:如果在鏈接應(yīng)用程序時指明是Windows 4.x版本,除非應(yīng)用程序的窗口有窗口某單,否則窗口控制沒有標題控制。對Windows3.x版本沒有這種要求。
Windows CE:CreateWindow是以“宏”方式完成的。它被定義為CreateWindowEX,并且dwExStyle參數(shù)被置為長整數(shù)0。不支持菜單條控制,除非被聲明為子窗口標志否則hMenu參數(shù)必須為NULL。不支持MDICLIENT窗口類。dwStyle參數(shù)可以是對話框(Dialogue Box),窗口(Windows),控制(Controls)文件中的窗口風(fēng)格和控制風(fēng)格的組合。
下列dwStyle標志在窗口中不支持:
WS_CHILDWINDOW WS_ICONC;WS_MAXMIZE WS_MAXIMIZEBOX;WS_MINIMIZE WS_MINIMIZEBOX;
WS_OVERLAPPEDWINDOW WS_POPUPWINDOW;WS_SIZEBOXWS_THICKFRAME WS_TILED WS_TILEDWINDOW
下列dwStyle標志在控制和對話框中不支持:
不支持的按鈕風(fēng)格和靜態(tài)控制風(fēng)格:
BS_LEFTTEXT SS_BLACKFRAME;BS_MULTILINE SS_GRAYFRAME BS_TEXT SS_METAPICT;BS_USERBUTTON SS_SIMPLE
不支持組合框SS_WHITERECT風(fēng)格。
CBS_OWNERDRAWFIXED SS_BLACKRECT;CBS_OWNWEDRAWVARIABLE SS_GRAYRECT; CBS_SIMPLE8R舊HTrIMAGE
不支持列表框控制SS_WHITEFRAME風(fēng)格。
LBS_NODATA
不支持的對話框風(fēng)格:
LBS_OWNERDRAWFIXED DS_ABSALIGN; LBS_OWNERDRAWVARIABLE DS_CENTERMOUSE; LBS_STANDARD DS_CONTEXTHELP
不支持滾動條的 DS_FIXEDSYS風(fēng)格
SBS_BOTTOMALIGN DS_NOFAILCREATE;SBS_RIGHTALIGN DS_NOIDLEMSG;
SBS_SlZEBOXBOTT0MRIHTALIGN DS_SYSMODAL;SBS_SIZEGRIP
可使用BS_OWNERDRAW風(fēng)格來代替BS_USERBUTTON風(fēng)格。
可使用SS_LEFT或SS_LEFTNOWORDWRAP風(fēng)格來代替靜態(tài)控制的SS_SIMPLE風(fēng)格。
不支持MDICLIENT窗口類。
所有窗口都隱含WS_CLIPSIBLINGS和 WS_CLIPCHILDREN風(fēng)格。
Windows CE1.0版除對話框外不支持被屬窗口。如果hwndParent參數(shù)不為NULL,則窗口隱含給出WS_CHILD風(fēng)格。Windows CE1.0不支持菜單條。
速查: Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;頭文件:winuser.h;庫文件:user32.lib; Unicode:在Windows NT上實現(xiàn)為Unicode和ANSI兩種版本。