- case WM_RBUTTONDBLCLK:
- {
- int x = (DIMENSION_TYPE) LOWORD(lParam);
- int y = (DIMENSION_TYPE) HIWORD(lParam);
- MSWOnRButtonDClick(x, y, wParam);
- break;
- }
- case WM_MBUTTONDOWN:
- {
- int x = (DIMENSION_TYPE) LOWORD(lParam);
- int y = (DIMENSION_TYPE) HIWORD(lParam);
- MSWOnMButtonDown(x, y, wParam);
- break;
- }
- case WM_MBUTTONUP:
- {
- int x = (DIMENSION_TYPE) LOWORD(lParam);
- int y = (DIMENSION_TYPE) HIWORD(lParam);
- MSWOnMButtonUp(x, y, wParam);
- break;
- }
- case WM_MBUTTONDBLCLK:
- {
- int x = (DIMENSION_TYPE) LOWORD(lParam);
- int y = (DIMENSION_TYPE) HIWORD(lParam);
- MSWOnMButtonDClick(x, y, wParam);
- break;
- }
- case WM_LBUTTONDOWN:
- {
- int x = (DIMENSION_TYPE) LOWORD(lParam);
- int y = (DIMENSION_TYPE) HIWORD(lParam);
- MSWOnLButtonDown(x, y, wParam);
- break;
- }
- case WM_LBUTTONUP:
- {
- int x = (DIMENSION_TYPE) LOWORD(lParam);
- int y = (DIMENSION_TYPE) HIWORD(lParam);
- MSWOnLButtonUp(x, y, wParam);
- break;
- }
- case WM_LBUTTONDBLCLK:
- {
- int x = (DIMENSION_TYPE) LOWORD(lParam);
- int y = (DIMENSION_TYPE) HIWORD(lParam);
- MSWOnLButtonDClick(x, y, wParam);
- break;
- }
- case WM_MOUSEMOVE:
- {
- int x = (DIMENSION_TYPE) LOWORD(lParam);
- int y = (DIMENSION_TYPE) HIWORD(lParam);
- MSWOnMouseMove(x, y, wParam);
- break;
- }
- case MM_JOY1BUTTONDOWN:
- {
- int x = LOWORD(lParam);
- int y = HIWORD(lParam);
- MSWOnJoyDown(wxJOYSTICK1, x, y, wParam);
- break;
- }
- case MM_JOY2BUTTONDOWN:
- {
- int x = LOWORD(lParam);
- int y = HIWORD(lParam);
- MSWOnJoyDown(wxJOYSTICK2, x, y, wParam);
- break;
- }
- case MM_JOY1BUTTONUP:
- {
- int x = LOWORD(lParam);
- int y = HIWORD(lParam);
- MSWOnJoyUp(wxJOYSTICK1, x, y, wParam);
- break;
- }
- case MM_JOY2BUTTONUP:
- {
- int x = LOWORD(lParam);
- int y = HIWORD(lParam);
- MSWOnJoyUp(wxJOYSTICK2, x, y, wParam);
- break;
- }
- case MM_JOY1MOVE:
- {
- int x = LOWORD(lParam);
- int y = HIWORD(lParam);
- MSWOnJoyMove(wxJOYSTICK1, x, y, wParam);
- break;
- }
- case MM_JOY2MOVE:
- {
- int x = LOWORD(lParam);
- int y = HIWORD(lParam);
- MSWOnJoyMove(wxJOYSTICK2, x, y, wParam);
- break;
- }
- case MM_JOY1ZMOVE:
- {
- int z = LOWORD(lParam);
- MSWOnJoyZMove(wxJOYSTICK1, z, wParam);
- break;
- }
- case MM_JOY2ZMOVE:
- {
- int z = LOWORD(lParam);
- MSWOnJoyZMove(wxJOYSTICK2, z, wParam);
- break;
- }
- case WM_DESTROY:
- {
- if (MSWOnDestroy())
- return 0;
- else return MSWDefWindowProc(message, wParam, lParam );
- break;
- }
- case WM_SYSCOMMAND:
- {
- return MSWOnSysCommand(wParam, lParam);
- break;
- }
- case WM_COMMAND:
- {
-#ifdef __WIN32__
- WORD id = LOWORD(wParam);
- HWND hwnd = (HWND)lParam;
- WORD cmd = HIWORD(wParam);
-#else
- WORD id = (WORD)wParam;
- HWND hwnd = (HWND)LOWORD(lParam) ;
- WORD cmd = HIWORD(lParam);
-#endif
- if (!MSWOnCommand(id, cmd, (WXHWND) hwnd))
- return MSWDefWindowProc(message, wParam, lParam );
- break;
- }
-#if defined(__WIN95__)
- case WM_NOTIFY:
- {
- // for some messages (TVN_ITEMEXPANDING for example), the return
- // value of WM_NOTIFY handler is important, so don't just return 0
- // if we processed the message
- return MSWOnNotify(wParam, lParam);
- }
-#endif
- case WM_MENUSELECT:
- {
-#ifdef __WIN32__
- WORD flags = HIWORD(wParam);
- HMENU sysmenu = (HMENU)lParam;
-#else
- WORD flags = LOWORD(lParam);
- HMENU sysmenu = (HMENU)HIWORD(lParam);
+ }
+}
+
+bool wxCheckWindowWndProc(WXHWND hWnd, WXFARPROC wndProc)
+{
+#if wxUSE_UNICODE_MSLU
+ // VS: We can't use GetWindowLong(hwnd, GWL_WNDPROC) together with unicows.dll
+ // because it doesn't return pointer to the real wnd proc but rather a handle
+ // of a fake proc that does Unicode<->ANSI translation.
+ //
+ // The hack bellow works, because WNDCLASS contains original window handler
+ // rather that the unicows fake one. This may not be on purpose, though; if
+ // it stops working with future versions of unicows.dll, we can override
+ // unicows hooks by setting Unicows_{Set,Get}WindowLong and
+ // Unicows_RegisterClass to our own versions that keep track of
+ // fake<->real wnd proc mapping.
+ //
+ // FIXME: Doesn't handle wnd procs set by SetWindowLong, only these set
+ // with RegisterClass!!
+
+ if ( wxUsingUnicowsDll() )
+ {
+ static wxChar buffer[512];
+ WNDCLASS cls;
+
+ ::GetClassName((HWND)hWnd, buffer, 512);
+ ::GetClassInfo(wxGetInstance(), buffer, &cls);
+ return wndProc == (WXFARPROC)cls.lpfnWndProc;
+ }
+ else