LRESULT CALLBACK Ctrl::OverwatchWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if(msg == WM_USER) { ELOGW("WM_USER"); PostQuitMessage(0); } if(msg == WM_QUERYENDSESSION) { static BOOL (WINAPI *ShutdownBlockReasonCreate)(HWND hWnd, LPCWSTR pwszReason); static BOOL (WINAPI *ShutdownBlockReasonDestroy)(HWND hWnd); ONCELOCK { if(HMODULE hDLL = LoadLibrary ("user32")) { AutoCast(ShutdownBlockReasonCreate, GetProcAddress(hDLL, "ShutdownBlockReasonCreate")); AutoCast(ShutdownBlockReasonDestroy, GetProcAddress(hDLL, "ShutdownBlockReasonCreate")); } } if(ShutdownBlockReasonCreate) ShutdownBlockReasonCreate(hwnd, ~WString(t_("waiting for user response"))); EndSession(); ELOGW("WM_QUERYENDSESSION 1"); OverwatchEndSession.Wait(); if(ShutdownBlockReasonDestroy) ShutdownBlockReasonDestroy(hwnd); ELOGW("WM_QUERYENDSESSION 2"); return TRUE; } if(msg == WM_ENDSESSION) { EndSession(); ELOGW("WM_ENDSESSION 1"); ExitLoopEvent.Set(); ELOGW("WM_ENDSESSION 2"); } return DefWindowProc(hwnd, msg, wParam, lParam); }
DWORD WINAPI Ctrl::Win32OverwatchThread(LPVOID) { WNDCLASS wc; Zero(wc); wc.style = CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)OverwatchWndProc; wc.hInstance = hInstance; wc.hCursor = NULL; wc.hbrBackground = NULL; wc.lpszClassName = "UPP-OVERWATCH"; RegisterClass(&wc); OverwatchHWND = CreateWindowEx(0, "UPP-OVERWATCH", "", WS_OVERLAPPEDWINDOW, -1000, -1000, 50, 50, NULL, NULL, hInstance, NULL); ELOGW("OverWatch 1"); ExitLoopEvent.Set(); ELOGW("OverWatch 2"); MSG Msg; while(GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); if(IsWindowUnicode(Msg.hwnd)) DispatchMessageW(&Msg); else DispatchMessage(&Msg); } ELOGW("OverWatch 3"); return 0; }
LRESULT CALLBACK Ctrl::OverwatchWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if(msg == WM_USER) { ELOGW("WM_USER"); PostQuitMessage(0); } if(msg == WM_ENDSESSION) { EndSession(); ELOGW("WM_ENDSESSION 1"); ExitLoopEvent.Set(); ELOGW("WM_ENDSESSION 2"); OverwatchEndSession.Wait(); ELOGW("WM_ENDSESSION 3"); } return DefWindowProc(hwnd, msg, wParam, lParam); }