CreateWindowExA 函式 (winuser.h)
建立具有延伸窗口樣式的重疊、彈出視窗或子視窗;否則,此函式與 createWindow 函式
語法
HWND CreateWindowExA(
[in] DWORD dwExStyle,
[in, optional] LPCSTR lpClassName,
[in, optional] LPCSTR lpWindowName,
[in] DWORD dwStyle,
[in] int X,
[in] int Y,
[in] int nWidth,
[in] int nHeight,
[in, optional] HWND hWndParent,
[in, optional] HMENU hMenu,
[in, optional] HINSTANCE hInstance,
[in, optional] LPVOID lpParam
);
參數
[in] dwExStyle
類型:DWORD
正在建立之視窗的延伸窗口樣式。 如需可能值的清單,請參閱
[in, optional] lpClassName
類型:LPCTSTR
null終止字串或類別 atom。
如果 null-terminated 字串,它會指定視窗類別名稱。 類別名稱可以是向 registerClass
如果先前呼叫
[in, optional] lpWindowName
類型:LPCTSTR
視窗名稱。 如果視窗樣式指定標題列,則會在標題列中顯示 lpWindowName 指向的視窗標題。 使用 CreateWindow 建立控件時,例如按鈕、複選框和靜態控件,請使用 lpWindowName 來指定控件的文字。 使用 SS_ICON 樣式建立靜態控件時,請使用 lpWindowName 來指定圖示名稱或標識符。 若要指定識別碼,請使用語法 「#num」。
[in] dwStyle
類型:DWORD
正在建立之窗口的樣式。 這個參數可以是 視窗樣式值的組合,再加上一節中指示的控件樣式。
[in] X
類型:int
視窗的初始水準位置。 對於重疊或彈出視窗,x 參數是視窗左上角的初始 x 座標,以螢幕座標表示。 針對子視窗,x 是視窗左上角相對於父視窗工作區左上角的 X 座標。 如果 x 設定為 CW_USEDEFAULT,系統會選取視窗左上角的預設位置,並忽略 y 參數。 CW_USEDEFAULT 僅適用於重疊的視窗;如果為彈出視窗或子視窗指定,x 和 y 參數會設定為零。
[in] Y
類型:int
視窗的初始垂直位置。 對於重疊或彈出視窗,y 參數是視窗左上角的初始 Y 座標,以螢幕座標表示。 針對子視窗,y 是子視窗左上角相對於父視窗工作區左上角的初始 Y 座標。 對於清單框 y 是清單框工作區左上角相對於父視窗工作區左上角的初始 Y 座標。
如果使用設定 WS_VISIBLE 樣式位建立重疊的視窗,且 x 參數設定為 CW_USEDEFAULT,則 y 參數會決定視窗的顯示方式。 如果 y 參數是 CW_USEDEFAULT,則視窗 管理員會在建立窗口之後,使用 SW_SHOW 旗標呼叫 showWindow。 如果
[in] nWidth
類型:int
視窗的寬度,以裝置單位為單位。 對於重疊的視窗,nWidth 是視窗的寬度、螢幕座標或 CW_USEDEFAULT。 如果 nWidth 為 CW_USEDEFAULT,系統會選取視窗的默認寬度和高度;默認寬度會從初始 x 座標延伸至螢幕右邊緣;預設高度會從初始 Y 座標延伸至圖示區域的頂端。 CW_USEDEFAULT 僅適用於重疊的視窗;如果為彈出視窗或子視窗指定 CW_USEDEFAULT,nWidth,且 nHeight 參數會設定為零。
[in] nHeight
類型:int
視窗的高度,以裝置單位為單位。 對於重疊的視窗,nHeight 是視窗的高度,以螢幕座標表示。 如果
[in, optional] hWndParent
類型:HWND
所建立視窗之父視窗或擁有者視窗的句柄。 若要建立子視窗或擁有的視窗,請提供有效的視窗句柄。 這個參數是彈出視窗的選擇性參數。
若要建立 僅限訊息視窗,請提供 HWND_MESSAGE 或現有僅限訊息視窗的句柄。
[in, optional] hMenu
類型:HMENU
功能表的句柄,或根據視窗樣式指定子視窗標識符。 對於重疊或彈出視窗,hMenu 會識別要與視窗搭配使用的功能表;如果要使用類別功能表,它可以 NULL。 針對子視窗,hMenu 會指定子視窗標識碼,這是對話框控件用來通知其父代事件的整數值。 應用程式會決定子視窗識別碼;對於具有相同父視窗的所有子視窗而言,它必須是唯一的。
[in, optional] hInstance
類型:HINSTANCE
要與視窗相關聯之模組實例的句柄。
[in, optional] lpParam
類型:LPVOID
要透過 CREATESTRUCT 結構(lpCreateParams 成員)指向的值指標,由 WM_CREATE 訊息的 lParam 參數所指向。 此訊息會在傳回之前,由此函式傳送至所建立的視窗。
如果應用程式呼叫 CreateWindow 來建立 MDI 用戶端視窗,lpParam 應該指向 CLIENTCREATESTRUCT 結構。 如果 MDI 用戶端視窗呼叫
傳回值
類型:HWND
如果函式成功,傳回值就是新視窗的句柄。
如果函式失敗,則傳回值 NULL。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
此函式通常會因為下列其中一個原因而失敗:
- 無效的參數值
- 系統類別是由不同的模塊註冊
- 已安裝 WH_CBT 攔截,並傳回失敗碼
- 如果未註冊對話框範本中的其中一個控件,或其視窗視窗程式 WM_CREATE 或 WM_NCCREATE
言論
CreateWindowEx 函式會將 WM_NCCREATE、WM_NCCALCSIZE和 WM_CREATE 訊息傳送至所建立的視窗。
如果建立的視窗是子視窗,則其預設位置位於 Z 順序的底部。 如果建立的視窗是最上層視窗,其預設位置會位於 Z 順序的頂端(但除非建立的視窗本身是最上層的視窗底下)。
如需控制工作列是否顯示已建立視窗按鈕的資訊,請參閱 管理工作列按鈕。
如需移除視窗的資訊,請參閱 DestroyWindow 函式。
您可以在 lpClassName 參數中指定下列預先定義的控件類別。 請注意您可以在 dwStyle 參數中使用的對應控件樣式。
類 | 意義 |
---|---|
按鈕 |
指定小型矩形子視窗,代表使用者可以按下以開啟或關閉按鈕的按鈕。 按鈕控制項可以單獨或群組使用,而且可以標示或顯示沒有文字。 當使用者按鍵控制項時,按鈕控制項通常會變更外觀。 如需詳細資訊,請參閱 按鈕。
如需按鈕樣式的表格,您可以在 dwStyle 參數中指定,請參閱 按鈕樣式。 |
COMBOBOX |
指定由清單框和類似編輯控制件的選取欄位所組成的控制件。 使用此樣式時,應用程式應該隨時顯示清單框,或啟用下拉式清單框。 如果顯示清單框,請在選取字段中輸入字元會反白顯示符合輸入字元的第一個清單框專案。 相反地,選取清單框中的項目會顯示選取欄位中選取的文字。 如需詳細資訊,請參閱 下拉式方塊。
如需可在 dwStyle 參數中指定的下拉式方塊樣式表格,請參閱 下拉式方塊樣式。 |
EDIT |
指定矩形子視窗,用戶可以從鍵盤輸入文字。 用戶選取控件,並按TAB鍵來提供鍵盤焦點。 當使用者編輯控件顯示閃爍插入號時,可以輸入文字;使用滑鼠移動游標、選取要取代的字元,或將游標置於插入字元的位置;或使用索引鍵來刪除字元。 如需詳細資訊,請參閱 編輯控制項。
如需您可以在 dwStyle 參數中指定的編輯控件樣式數據表,請參閱 編輯控件樣式。 |
LISTBOX |
指定字元字串的清單。 每當應用程式必須顯示名稱清單,例如檔名,用戶可以選擇時,請指定此控制項。 用戶可以按下字串來選取字串。 已醒目提示選取的字串,並將通知訊息傳遞至父視窗。 如需詳細資訊,請參閱 清單框。
如需清單框樣式的表格,您可以在 dwStyle 參數中指定,請參閱 清單框樣式。 |
MDICLIENT | 指定 MDI 用戶端視窗。 此視窗會接收控制 MDI 應用程式子視窗的訊息。 建議的樣式位為 WS_CLIPCHILDREN 和 WS_CHILD。 指定 WS_HSCROLL 和 WS_VSCROLL 樣式,以建立 MDI 用戶端視窗,讓使用者將 MDI 子視窗捲動到檢視中。 如需詳細資訊,請參閱 多個檔案介面。 |
RichEdit |
指定 Microsoft Rich Edit 1.0 控制件。 此視窗可讓使用者檢視和編輯具有字元和段落格式的文字,並可包含內嵌的元件物件模型 (COM) 物件。 如需詳細資訊,請參閱 Rich Edit Controls。
如需可在 dwStyle 參數中指定的豐富編輯控件樣式數據表,請參閱 Rich Edit Control Styles。 |
RICHEDIT_CLASS |
指定 Rich Edit 2.0 控制件Microsoft。 此控制項可讓使用者使用字元和段落格式來檢視和編輯文字,並可包含內嵌的 COM 物件。 如需詳細資訊,請參閱 Rich Edit Controls。
如需可在 dwStyle 參數中指定的豐富編輯控件樣式數據表,請參閱 Rich Edit Control Styles。 |
SCROLLBAR |
指定包含滾動盒的矩形,並在兩端都有方向箭號。 每當使用者按兩下控制項時,滾動條就會將通知訊息傳送至其父視窗。 父視窗負責視需要更新滾動盒的位置。 如需詳細資訊,請參閱 滾動條。
如需滾動條控件樣式的表格,您可以在 dwStyle 參數中指定,請參閱 滾動條控件樣式。 |
STATIC |
指定用來標記、方塊或分隔其他控件的簡單文字欄位、方塊或矩形。 靜態控件不會接受任何輸入,而且不會提供任何輸出。 如需詳細資訊,請參閱 靜態控件。
如需靜態控件樣式的數據表,您可以在 dwStyle 參數中指定,請參閱 靜態控件樣式。 |
dwExStyle 的 WS_EX_NOACTIVATE 值可防止系統前景啟用。 若要在使用者按兩下視窗時防止佇列啟用,您必須適當地處理 WM_MOUSEACTIVATE 訊息。 若要將視窗帶入前景,或以程式設計方式啟用視窗,請使用 setForegroundWindow 或 SetActiveWindow。 傳回 FALSE 至 WM_NCACTIVATE 可防止視窗失去佇列啟用。 不過,在啟用時會忽略傳回值。
設定 WS_EX_COMPOSITED 之後,視窗的所有子系都會使用雙緩衝來取得由下到上繪製順序。 從下到上繪製順序可讓子代視窗具有半透明(Alpha)和透明度(色彩索引鍵)效果,但只有在子代視窗也已設定 WS_EX_TRANSPARENT 位時。 雙緩衝可讓視窗及其子系繪製而不閃爍。
例
下列範例程式代碼說明如何使用 CreateWindowExA。
BOOL Create(
PCWSTR lpWindowName,
DWORD dwStyle,
DWORD dwExStyle = 0,
int x = CW_USEDEFAULT,
int y = CW_USEDEFAULT,
int nWidth = CW_USEDEFAULT,
int nHeight = CW_USEDEFAULT,
HWND hWndParent = 0,
HMENU hMenu = 0
)
{
WNDCLASS wc = {0};
wc.lpfnWndProc = DERIVED_TYPE::WindowProc;
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = ClassName();
RegisterClass(&wc);
m_hwnd = CreateWindowEx(
dwExStyle, ClassName(), lpWindowName, dwStyle, x, y,
nWidth, nHeight, hWndParent, hMenu, GetModuleHandle(NULL), this
);
return (m_hwnd ? TRUE : FALSE);
}
注意
winuser.h 標頭會將 CreateWindowEx 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
支援的最低伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平臺 | 窗戶 |
標頭 | winuser.h (包括 Windows.h) |
連結庫 | User32.lib |
DLL | User32.dll |
API 集 | ext-ms-win-ntuser-window-l1-1-0 (在 Windows 8 中引進) |
另請參閱
概念
其他資源
參考