mirror of
				https://github.com/gnif/LookingGlass.git
				synced 2025-10-30 20:21:56 +00:00 
			
		
		
		
	[idd] helper: correctly pump message and destroy window
This commit is contained in:
		| @@ -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(); | ||||
| } | ||||
|   | ||||
| @@ -21,6 +21,7 @@ public: | ||||
|   static bool registerClass(); | ||||
|   CWindow(); | ||||
|   ~CWindow(); | ||||
|   void destroy(); | ||||
|  | ||||
|   HWND hwnd() { return m_hwnd; } | ||||
| }; | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Quantum
					Quantum