CreateWindowExW 函式 (winuser.h)
建立具有延伸視窗樣式的重迭、快顯視窗或子視窗;否則,此函式與 CreateWindow 函式相同。 如需建立視窗的詳細資訊,以及 CreateWindowEx其他參數的完整描述,請參閱 CreateWindow。
語法
HWND CreateWindowExW(
[in] DWORD dwExStyle,
[in, optional] LPCWSTR lpClassName,
[in, optional] LPCWSTR 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
由先前呼叫RegisterClass 或 RegisterClassEx函式所建立的Null終止字串或類別 Atom。 Atom 必須以低序的 lpClassName字組表示;高序字必須是零。 如果 lpClassName 是字串,它會指定視窗類別名稱。 類別名稱可以是向RegisterClass 或 RegisterClassEx註冊的任何名稱,前提是註冊類別的模組也是建立視窗的模組。 類別名稱也可以是任何預先定義的 系統類別 名稱。
[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。 如果 y 參數是一些其他值,則視窗管理員會呼叫具有該值的 ShowWindow 做為 nCmdShow 參數。
[in] nWidth
類型: int
視窗的寬度,以裝置單位為單位。 對於重迭的視窗, nWidth 是視窗的寬度、螢幕座標或 CW_USEDEFAULT。 如果 nWidth是CW_USEDEFAULT,系統會選取視窗的預設寬度和高度;預設寬度會從初始 x 座標延伸至畫面右邊緣;預設高度會從初始 Y 座標延伸至圖示區域的頂端。 CW_USEDEFAULT 僅適用于重迭的視窗;如果 為 快顯視窗或子視窗指定CW_USEDEFAULT, 則 nWidth 和 nHeight 參數會設定為零。
[in] nHeight
類型: int
視窗的高度,以裝置單位為單位。 對於重迭的視窗, nHeight 是視窗的高度,以螢幕座標為單位。 如果 nWidth 參數設定為 CW_USEDEFAULT,則系統會忽略 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 用戶端視窗呼叫 CreateWindow 來建立 MDI 子視窗, lpParam 應該指向 MDICREATESTRUCT 結構。 如果不需要其他資料,lpParam可能是Null。
傳回值
類型: HWND
如果函式成功,則傳回值是新視窗的控制碼。
如果函式失敗,則傳回值為 Null。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
此函式通常會因為下列其中一個原因而失敗:
- 不正確參數值
- 系統類別是由不同的模組註冊
- 已安裝WH_CBT勾點,並傳回失敗碼
- 如果未註冊對話方塊範本中的其中一個控制項,或其視窗視窗程式WM_CREATE或WM_NCCREATE
備註
CreateWindowEx函式會將WM_NCCREATE、WM_NCCALCSIZE和WM_CREATE訊息傳送至所建立的視窗。
如果建立的視窗是子視窗,其預設位置會位於 Z 順序的底部。 如果建立的視窗是最上層視窗,則預設位置會位於 Z 順序 (的頂端,但除非建立的視窗本身是最上層的視窗底端) 底下。
如需控制工作列是否顯示所建立視窗按鈕的資訊,請參閱 管理工作列按鈕。
如需移除視窗的詳細資訊,請參閱 DestroyWindow 函式。
您可以在 lpClassName 參數中指定下列預先定義的控制項類別。 請注意您可以在 dwStyle 參數中使用的對應控制項樣式。
類別 | 意義 |
---|---|
按鈕 |
指定小型矩形子視窗,代表使用者可以按一下以開啟或關閉按鈕的按鈕。 按鈕控制項可以單獨或群組使用,而且可以標示或顯示沒有文字。 當使用者按一下按鈕時,按鈕控制項通常會變更外觀。 如需詳細資訊,請參閱 按鈕。
如需您可以在 dwStyle 參數中指定的按鈕樣式資料表,請參閱 按鈕樣式。 |
COMBOBOX |
指定包含清單方塊和選取範圍欄位的控制項,類似于編輯控制項。 使用此樣式時,應用程式應該隨時顯示清單方塊,或啟用下拉式清單方塊。 如果顯示清單方塊,請在選取欄位中輸入字元會醒目提示符合輸入字元的第一個清單方塊專案。 相反地,選取清單方塊中的專案會顯示選取欄位中選取的文字。 如需詳細資訊,請參閱 下拉式方塊。
如需您可以在 dwStyle 參數中指定的下拉式方塊樣式表格,請參閱 下拉式方塊樣式。 |
編輯 |
指定矩形子視窗,使用者可以在其中輸入鍵盤中的文字。 使用者選取控制項,並按 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 控制項樣式。 |
RICHEDIT_CLASS |
指定 Microsoft Rich Edit 2.0 控制項。 此控制項可讓使用者檢視及編輯具有字元和段落格式設定的文字,並可包含內嵌 COM 物件。 如需詳細資訊,請參閱 Rich Edit Controls。
如需您可以在 dwStyle 參數中指定之豐富編輯控制項樣式的資料表,請參閱 Rich Edit 控制項樣式。 |
SCROLLBAR |
指定包含捲動方塊的矩形,並在兩端都有方向箭號。 每當使用者按一下控制項時,捲軸就會將通知訊息傳送至其父視窗。 如有必要,父視窗會負責更新捲動方塊的位置。 如需詳細資訊,請參閱 捲軸。
如需您可以在 dwStyle 參數中指定的捲軸控制項樣式表格,請參閱 捲軸控制項樣式。 |
靜態 |
指定用來標記、方塊或分隔其他控制項的簡單文字欄位、方塊或矩形。 靜態控制項不會接受任何輸入,而且不會提供任何輸出。 如需詳細資訊,請參閱 靜態控制項。
如需您可以在 dwStyle 參數中指定之靜態控制項樣式的資料表,請參閱 靜態控制項樣式。 |
dwExStyle的WS_EX_NOACTI加值稅E值可防止系統啟用前景。 若要在使用者按一下視窗時防止佇列啟用,您必須適當地處理 WM_MOUSEACTI加值稅E 訊息。 若要將視窗帶入前景或以程式設計方式加以啟用,請使用 SetForegroundWindow 或 SetActiveWindow。 將 FALSE 傳回 WM_NCACTI加值稅E 可防止視窗遺失佇列啟用。 不過,在啟用時會忽略傳回值。
設定 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 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平臺 | Windows |
標頭 | winuser.h (包含 Windows.h) |
程式庫 | User32.lib |
DLL | User32.dll |
API 集合 | ext-ms-win-ntuser-window-l1-1-0 (在 Windows 8) 中引進 |
另請參閱
概念
其他資源
參考