diff --git a/idd/LGIddHelper/CWindow.cpp b/idd/LGIddHelper/CWindow.cpp index 9f92643b..b5e925cc 100644 --- a/idd/LGIddHelper/CWindow.cpp +++ b/idd/LGIddHelper/CWindow.cpp @@ -60,6 +60,9 @@ LRESULT CWindow::handleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_CREATE: onCreate(); return 0; + case WM_NCDESTROY: + PostQuitMessage(0); + return 0; default: if (s_taskbarCreated && uMsg == s_taskbarCreated) { @@ -89,8 +92,18 @@ void CWindow::registerIcon() DEBUG_ERROR_HR(GetLastError(), "Shell_NotifyIcon(NIM_ADD)"); } -CWindow::~CWindow() + +void CWindow::destroy() { if (m_hwnd) + { DestroyWindow(m_hwnd); + m_hwnd = NULL; + } +} + + +CWindow::~CWindow() +{ + destroy(); } diff --git a/idd/LGIddHelper/CWindow.h b/idd/LGIddHelper/CWindow.h index f507dfcd..ca6880a3 100644 --- a/idd/LGIddHelper/CWindow.h +++ b/idd/LGIddHelper/CWindow.h @@ -21,6 +21,7 @@ public: static bool registerClass(); CWindow(); ~CWindow(); + void destroy(); HWND hwnd() { return m_hwnd; } }; diff --git a/idd/LGIddHelper/main.cpp b/idd/LGIddHelper/main.cpp index ef239701..3c06d338 100644 --- a/idd/LGIddHelper/main.cpp +++ b/idd/LGIddHelper/main.cpp @@ -84,21 +84,31 @@ int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ CWindow window; - bool running = g_pipe.Init(); - while (running) + if (!g_pipe.Init()) { - switch (MsgWaitForMultipleObjects(1, l_exitEvent.GetAddressOf(), + window.destroy(); + l_exitEvent.Close(); + } + + while (true) + { + switch (MsgWaitForMultipleObjects( + l_exitEvent.IsValid() ? 1 : 0, + l_exitEvent.GetAddressOf(), FALSE, INFINITE, QS_ALLINPUT)) { case WAIT_OBJECT_0: - running = false; + window.destroy(); + l_exitEvent.Close(); break; case WAIT_OBJECT_0 + 1: { MSG msg; - if (GetMessage(&msg, NULL, 0, 0)) + while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { + if (msg.message == WM_QUIT) + goto exit; TranslateMessage(&msg); DispatchMessage(&msg); } @@ -107,10 +117,11 @@ int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _ case WAIT_FAILED: DEBUG_ERROR_HR(GetLastError(), "MsgWaitForMultipleObjects Failed"); - running = false; - break; + goto exit; } } + +exit: g_pipe.DeInit(); return EXIT_SUCCESS;