LRESULT CALLBACK CHookedWindow::_s_RootWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { CHookedWindow *this_ptr = (CHookedWindow*)GetWindowLongPtr(hWnd, GWLP_USERDATA); RECT r = {0, 0, 0, 0}; if (msg == WM_CLOSE && CallWindowProc(this_ptr->_stOldRootWindowProc, hWnd, msg, wParam, lParam) == 0) { this_ptr->_KillWindow(); return 0; } else if (msg == WM_DESTROY) { CallWindowProc(this_ptr->_stOldRootWindowProc, hWnd, msg, wParam, lParam ); this_ptr->_KillWindow(); return 0; } else { switch(msg) { case WM_KILLFOCUS: case WM_SETFOCUS: case WM_KEYUP: case WM_KEYDOWN: case WM_CHAR: case WM_MOUSEWHEEL: this_ptr->_pDelMessageProc->Invoke(WinAPIMsgToEngMsg(msg, wParam, lParam)); break; case WM_SIZING: GetClientRect(this_ptr->_hWnd, &r); this_ptr->_pDelMessageProc->Invoke(WinAPIMsgToEngMsg(WM_SIZING, wParam, (LPARAM)&r)); break; } if (this_ptr->_stOldRootWindowProc) return CallWindowProc(this_ptr->_stOldRootWindowProc, hWnd, msg, wParam, lParam ); else return DefWindowProc(hWnd, msg, wParam, lParam ); } }
LRESULT CALLBACK CHookedWindow::_s_WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { CHookedWindow *this_ptr = (CHookedWindow*)GetWindowLongPtr(hWnd, GWLP_USERDATA); if (msg == WM_DESTROY) { this_ptr->_KillWindow(); return DefWindowProc(hWnd, msg, wParam, lParam ); } else this_ptr->_pDelMessageProc->Invoke(WinAPIMsgToEngMsg(msg, wParam, lParam)); if(!this_ptr->_stOldWindowProc || (msg == WM_PAINT || msg == WM_SETTEXT || msg == WM_NCPAINT|| msg == WM_ERASEBKGND)) return DefWindowProc(hWnd, msg, wParam, lParam ); else return CallWindowProc(this_ptr->_stOldWindowProc, hWnd, msg, wParam, lParam); }
LRESULT CALLBACK CMainWindow::_s_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { CMainWindow *this_ptr = (CMainWindow*)GetWindowLongPtr(hWnd, GWLP_USERDATA); if (this_ptr) { if (message == WM_DESTROY) PostQuitMessage(0); this_ptr->_pDelMessageProc->Invoke(WinAPIMsgToEngMsg(message, wParam, lParam)); if ((message == WM_SYSCOMMAND && (wParam == SC_SCREENSAVE || wParam == SC_MONITORPOWER)) || message == WM_CLOSE) return 0; } return DefWindowProc(hWnd, message, wParam, lParam); }