我試圖破壞我目前使用的HWND,並打開一個新窗口後dissapearing第二...窗口中顯示出來,然後
這是我的代碼:
PostMessage(MainHwnd, WM_DESTROY, NULL, NULL); // Destroy the window
getClient() -> StartClient(); // Opening the client
在StartClient在那裏我有:
RegisterMainClass(MainInstance); // Registaring the class
//Creating the Window
MainHwnd = CreateWindowEx(WS_EX_CLIENTEDGE ,"MainClient", "Client", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 600, 500, NULL, NULL, MainInstance, NULL);
ShowWindow(MainHwnd, SW_SHOW);
UpdateWindow(MainHwnd);
所以窗口被破壞,客戶端窗口顯示了..但客戶端窗口只顯示了大約一秒鐘,然後再自敗!這是爲什麼?我已經檢查了幾次,它實際上創建了客戶端窗口,但它以某種方式隱藏它...
此外,我檢查了客戶端窗口的WndProc,它確實到達return DefWindowProc(hwnd, msg, wParam, lParam);
那麼是怎麼回事?爲什麼窗戶馬上消失?
我也有這2段在我RoomProc:
case WM_CLOSE:
PostQuitMessage(1);
break;
case WM_DESTROY:
DestroyWindow(hwnd);
答案在於我們看不到的代碼。現在是SSCCE的時候了。 –
正如其他人指出的,發送'WM_DESTROY'不正確。事實上,從你的'WM_DESTROY'處理程序中調用'DestroyWindow'創建了一個無限循環。最終你得到堆棧溢出並且進程終止。 –
@RaymondChen在我見過的所有例子中,他們一直在調用WM_DESTROY處理程序中的DestroyWindow ......那麼我真的應該如何去做呢? – Amit