2015-10-31 133 views
-3

我正在學習Win32 API的過程。我有一個問題,窗口明顯關閉,但應用程序在後臺運行(我可以使用Windows 10任務管理器查看)。這裏是我的代碼,即關閉窗口:Win32應用程序不被破壞

case WM_CLOSE: 
    DestroyWindow(hwnd); 
break; 

case WM_DESTROY: 
    PostQuitMessage(0); 
break; 

我的應用程序叫做a.exe的,你可以看到它在這個截圖我把在Windows 10的任務管理器。

It is a.exe

+1

什麼是你回來。從窗口程序([1](http s://msdn.microsoft.com/en-ca/library/windows/desktop/ms632617(v = vs.85).aspx)[2](https://msdn.microsoft.com/en-us/library /windows/desktop/ms632620(v=vs.85).aspx))?真正有用的是[MCVE](http://stackoverflow.com/help/mcve)。 – chris

+0

它變成了控制檯的問題。如果控制檯未關閉,並且正在運行FreeConsole(),它將不會關閉應用程序。我現在正在關閉控制檯,它正在工作。雖然謝謝! – Hyden

回答

0

我已經發現了這個問題。感謝所有幫助,但實際上是被關閉了窗口,但控制檯仍打開。在後臺我跑:

FreeConsole(); 

,那就是隱藏控制檯當我關閉控制檯保持運行的窗口,我現在關閉控制檯以及和它的作品

+2

控制檯*不應該*對您的程序退出的能力有任何影響。還有其他一些事情正在發生。但無論如何,調用'FreeConsole'通常表示您應該構建GUI應用程序('/ SUBSYSTEM:Windows')而不是控制檯應用程序('/ SUBSYSTEM:Console')。 –

+0

對不起,這不是很清楚。我的意思是FreeConsole()隱藏了控制檯,當我關閉窗口時,控制檯在後臺運行。控制檯是在任務管理器中顯示的,我已經刪除了FreeConsole(),現在我可以關閉控制檯,並且在任務管理器中沒有任何東西。 – Hyden

2

閱讀docs

「的PostQuitMessage函數職位WM_QUIT消息線程的消息隊列,並立即返回;函數只是表示該線程被要求在一些退出系統 當線程從其消息隊列中檢索到WM_QUIT消息時,它應該退出其消息循環並將控制權返回給系統。返回給系統的退出值必須是WM_QUIT消息的wParam參數。

WM_QUIT消息未與窗口關聯,因此將永遠不會通過窗口的窗口過程接收。它僅由GetMessage函數或的PeekMessage功能的恢復。」

見認爲link也。

+0

它變成了控制檯的問題。如果控制檯未關閉,並且正在運行FreeConsole(),它將不會關閉應用程序。我現在正在關閉控制檯,它正在工作。雖然謝謝! – Hyden

+0

@Hyden用控制檯的信息更新你的問題,然後張貼你自己的答案。 –

+0

@MarkRansom好的,謝謝。我已經用明顯標記的編輯更新了我的問題,並在下面發佈了答案。 – Hyden