? ? ? ? 什么是子窗口?當(dāng)我們?cè)邳c(diǎn)擊windows窗口的某個(gè)按鈕時(shí),比如點(diǎn)擊窗口的關(guān)閉按鈕,往往會(huì)彈出一個(gè)窗口來(lái)提示相關(guān)信息,類似這種彈出窗口就是主窗口的子窗口。我們創(chuàng)建子窗口時(shí),也是使用createwindow或者createwindowex 按鈕。
? ? ? ? 我們來(lái)看下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 );
? ? ? ? 這里我們只介紹下第三個(gè)參數(shù)dwStyle,設(shè)置窗口的風(fēng)格。我們?cè)诒緦趧?chuàng)建的第一個(gè)Windows窗口時(shí),將該值設(shè)置為WS_OVERLAPPEDWINDOW,這個(gè)設(shè)置的意思是允許窗口重疊。我們想要?jiǎng)?chuàng)建子窗口,也是通過(guò)設(shè)置窗口的WS_CHILD風(fēng)格實(shí)現(xiàn)。而需要顯示子窗口,還需要添加WS_VISIBLE風(fēng)格。若想以彈出的方式顯示子窗口(類似關(guān)閉確認(rèn)的對(duì)話框),需要添加WS_POPUP風(fēng)格。
? ? ? ? 我們?cè)诒緦诮榻B創(chuàng)建窗口的代碼之上,在主函數(shù)中增加如下代碼:
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,?"注冊(cè)失敗",?"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創(chuàng)建子窗口,運(yùn)行程序,效果如下: