Код | class NewClass { public: NewClass(HWND hwnd) { OldWndProc = (WNDPROC)SetWindowLong(hwnd, GWL_WNDPROC, (LONG)NewWndProc); SetProp(hwnd, "tagnewclass", (void*)this); } ~NewClass(HWND hwnd) { RemoveProp(hwnd, "tagnewclass"); SetWindowLong(hwnd, GWL_WNDPROC, (LONG)OldWndProc); } WNDPROC OldWndProc; friend LRESULT CALLBACK NewWndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam); }; LRESULT CALLBACK NewWndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { NewClass *ncls = (NewClass*)GetProp(hwnd, "tagnewclass"); switch(Message) { HANDLE_MSG(hwnd, WM_PAINT, ncls->_OnPaint);//можно вне класса HANDLE_MSG(hwnd, WM_MOUSEMOVE, ncls->_OnMouseMove); HANDLE_MSG(hwnd, WM_LBUTTONUP, ncls->_OnLButtonUp); HANDLE_MSG(hwnd, WM_LBUTTONDOWN, ncls->_OnLButtonDown); } return CallWindowProc(ncls->OldWndProc, hwnd, Message, wParam, lParam); } | |