什麼是子視窗?當我們在點擊Windows視窗的某個按鈕時,例如點擊視窗的關閉按鈕,往往會彈出一個視窗來提示相關訊息,類似這種彈出視窗就是主視窗的子視窗。我們建立子視窗時,也是使用CreateWindow或CreateWindowEx API。
我們來看看CreateWindow的函數原型:
HWND WINAPI CreateWindow( _In_opt_ LPCTSTR lpClassName, _In_opt_ LPCTSTR lpWindowName, _In_ DWORD dwStyle, _In_ int x, _In_ int y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam );
這裡我們只介紹下第三個參數dwStyle,設定視窗的樣式。我們在本專欄創建的第一個Windows視窗時,將該值設為WS_OVERLAPPEDWINDOW,而這個設定的意思是允許視窗重疊。我們想要建立子窗口,也是透過設定視窗的WS_CHILD風格實現。而需要顯示子窗口,還需要加入WS_VISIBLE風格。若想以彈出的方式顯示子視窗(類似關閉確認的對話方塊),需要新增WS_POPUP風格。
我們在本專欄介紹創建視窗的程式碼之上,在主函數中增加以下程式碼:
int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) { // TODO: Place code here. g_hInstance = hInstance; BOOL nRet = Register("Main", WndProc); if (!nRet) { MessageBox(NULL, "注册失败", "Infor", MB_OK); return 0; } HWND hWnd = CreateMain("Main", "window"); CreateWindow("Main", "子窗口", WS_OVERLAPPEDWINDOW|WS_CHILD|WS_VISIBLE|WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, 400, 200, hWnd, NULL, g_hInstance, NULL); Display(hWnd); Message(); return 0; }
注意第16行程式碼,就是我們利用CreateWindow建立子視窗,執行程序,建立子視窗,執行程序,建立子視窗效果如下:
以上是Win32 SDK基礎(七)之如何建立一個視窗的子視窗的案例的詳細內容。更多資訊請關注PHP中文網其他相關文章!