WINDOWS API中CREATEWINDOW()函式詳解(轉載)*
原文 https://www.cnblogs.com/jjmcu/p/3881441.html
CreateWindow函式詳解
在註冊完視窗類後就需要進行視窗的建立,用到的函式理所當然就是CreateWindow(), 而這個函式是基於視窗類的,所以還需要指定幾個引數來制定特定的視窗。而且像一些不帶邊框的視窗是怎麼建立的也是具有相當的技巧的,就是建立的是不帶標題和邊框的視窗,然後自己在客戶區繪製程式的內容,能夠製作個性化的應用程式。
API解釋
該函式建立一個重疊式視窗、彈出式視窗或子視窗。它指定視窗類,視窗標題,視窗風格,以及視窗的初始位置及大小(可選的)。函式也指該視窗的父視窗或所屬視窗(如果存在的話),及視窗的選單。
若要使用除 CreateWindow 函式支援的風格外的擴充套件風格,則使用 CreateWindowEx 函式代替 CreateWindow 函式。
API函式原型:
HWND WINAPI CreateWindow(
_In_opt_LPCTSTR lpClassName,// 視窗類名稱
_In_opt_LPCTSTR lpWindowName,// 視窗標題
_In_ DWORD dwStyle,// 視窗風格,或稱視窗格式
_In_ int x,// 初始 x 座標
_In_ int y,// 初始 y 座標
_In_ int nWidth,// 初始 x 方向尺寸
_In_ int nHeight,// 初始 y 方向尺寸
_In_opt_HWND hWndParent,// 父視窗控制代碼
_In_opt_HMENU hMenu,// 視窗選單控制代碼
_In_opt_HINSTANCE hInstance,// 程式例項控制代碼
_In_opt_LPVOID lpParam // 建立引數
);
注:_In_ 說明該引數是輸入的,_opt_ 說明該引數是可選引數(不是說沒有引數,而是可以利用巨集搭配引數)。
引數解析:
引數 |
含義 |
lpClassName |
1. 視窗類名稱,可以是一個指向 NULL 結束的字串或一個整型數值 3. 如是一個整型量,它是由此前呼叫 theGlobalAddAtom 函式產生的全域性量。這個小於 0xC000 的 16 位數必須是 lpClassName 引數字的低 16 位,該引數的高位必須是 0 |
lpWindowName |
1. 視窗標題,一個指向 NULL 結束的字串指標 |
dwStyle |
指定建立視窗的風格(詳見下方↓) |
x |
1. 指定視窗的初始水平位置(x 座標) |
y |
1. 指定視窗的初始垂直位置(y 座標) |
nWidth |
1. 以裝置單元指明視窗的寬度 |
nHeight |
1. 以裝置單元指明視窗的高度 |
hWndParent |
1. 指向被建立視窗的父視窗或所有者視窗的控制代碼 |
hMenu |
1. 指向視窗選單控制代碼,或依據視窗風格指明一個子視窗標識 |
hInstance |
與視窗相關聯的模組例項的控制代碼 |
lpParam |
1. 指向一個值的指標,該值傳遞給視窗 WM_CREATE 訊息。該值通過在 IParam 引數中的 CREATESTRUCT 結構傳遞 |
dwStyle 視窗風格解析
視窗風格 |
含義 |
WS_BORDER |
建立一個帶邊框的視窗 |
WS_CAPTION |
建立一個有標題框的視窗(包含了 WS_BODER 風格) |
WS_CHILD |
建立一個子視窗,這個風格的視窗不能擁有選單也不能與 WS_POPUP 風格合用 |
WS_CHILDWINDOW |
與 WS_CHILD 相同 |
WS_CLIPCHILDREN |
當在父視窗內繪圖時,排除子視窗區域,在建立父視窗時使用這個風格 |
WS_CLIPSIBLINGS |
1. 排除子視窗之間的相對區域,也就是,當一個特定的視窗接收到 WM_PAINT 訊息時,WS_CLIPSIBLINGS 風格將所有層疊視窗排除在繪圖之外,只重繪指定的子視窗 |
WS_DISABLED |
1. 建立一個初始狀態為禁止的子視窗,一個禁止狀態的視窗不能接受來自使用者的輸入資訊 |
WS_DLGFRAME |
建立一個帶對話方塊邊框風格的視窗,這種風格的視窗不能帶標題條 |
WS_GROUP |
1. 指定一組“控制視窗”的第一個“控制視窗” |
WS_HSCROLL |
建立一個有水平滾動條的視窗 |
WS_ICONIC |
建立一個初始狀態為最小化狀態的視窗,與 WS_MINIMIZE 風格相同 |
WS_MAXIMIZE |
建立一個初始狀態為最大化狀態的視窗 |
WS_MAXIMIZEBOX |
建立一個具有最大化按鈕的視窗,該風格不能與 WS_EX_CONTEXTHELP 風格同時出現,同時必須指定 WS_SYSMENU 風格 |
WS_MINIMIZE |
建立一個初始狀態為最小化狀態的視窗,與 WS_ICONIC 風格相同 |
WS_MINIMIZEBOX |
建立一個具有最小化按鈕的視窗,該風格不能與 WS_EX_CONTEXTHELP 風格同時出現,同時必須指定 WS_SYSMENU 風格 |
WS_OVERLAPPED |
產生一個層疊的視窗,一個層疊的視窗有一個標題條和一個邊框,與 WS_TILED 風格相同 |
WS_OVERLAPPEDWINDOW |
相當於(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX),與 WS_TILEDWINDOW 風格相同 |
WS_POPUP |
建立一個彈出式視窗,該風格不能與 WS_CHILD 風格同時使用。 |
WS_POPUPWINDOW |
相當於(WS_POPUP | WS_BORDER | WS_SYSMENU),但 WS_CAPTION 和 WS_POPUPWINDOW 必須同時設定才能使視窗某單可見 |
WS_SIZEBOX |
建立一個可調邊框的視窗,與 WS_THICKFRAME 風格相同 |
WS_SYSMENU |
建立一個在標題條上帶有視窗選單的視窗,必須同時設定 WS_CAPTION 風格 |
WS_TABSTOP |
1. 建立一個“控制視窗”,在使用者按下 Tab 鍵時可以獲得鍵盤焦點。 |
WS_THICKFRAME |
建立一個具有可調邊框的視窗,與 WS_SIZEBOX 風格相同 |
WS_TILED |
產生一個層疊的視窗,一個層疊的視窗有一個標題和一個邊框,與 WS_OVERLAPPED 風格相同 |
WS_TILEDWINDOW |
相當於(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX),與 WS_OVERLAPPEDWINDOW 風格相同 |
WS_VISIBLE |
建立一個初始狀態為可見的視窗 |
WS_VSCROLL |
建立一個有垂直滾動條的視窗 |
返回值:
1. 如果函式成功,返回值為新視窗的控制代碼。
2. 如果函式失敗,返回值為 NULL。
應用舉例
一 建立帶垂直滾動條和水平滾動條的視窗程式
hwnd = CreateWindow(szAppName,
TEXT("垂直和水平滾動條"),
WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL,// | 上兩引數即可
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
hInstance,
NULL);
二 建立使用者不可操作的win32程式
hwnd = CreateWindow(szAppName,
WS_DISABLED,// 修改為失能引數
CW_USEDEFAULT,
NULL);
三 使用彈出式視窗建立不帶邊框和標題欄的視窗
hwnd = CreateWindow(szAppName,
WS_POPUP,// 彈出式視窗,並且要修改長寬
CW_USEDEFAULT,
NULL);
四 帶邊框的彈出式視窗
hwnd = CreateWindow(szAppName,
WS_POPUP | WS_SIZEBOX,
NULL);