2015-10-31 2 views
-3

Я изучаю API Win32. У меня проблема, когда окно явно закрыто, но приложение работает в фоновом режиме (я вижу это с помощью диспетчера задач 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 из очереди сообщений, он должен выйти из цикла сообщения и вернуть управление системе. Значение возврата, возвращаемое в систему, должно быть параметром wParam сообщения WM_QUIT.

Сообщение WM_QUIT не связано с окном и поэтому никогда не будет получено через оконную процедуру окна. Он извлекается только функция GetMessage или PeekMessage.»

См думают link также.

+0

Повернитесь, это проблема с консолью. Он не будет закрывать приложение, если консоль не закрыта, и я запускаю FreeConsole(). Я тоже закрываю консоль, и она работает. Спасибо хоть! – Hyden

+0

@Hyden обновите свой вопрос информацией о консоли, а затем разместите свой собственный ответ. –

+0

@MarkRansom Хорошо, спасибо. Я обновил свой вопрос с четко обозначенным правлением, и я опубликовал ответ ниже. – Hyden

Смежные вопросы