//-------------------------------------------------------------------------------- bool CPointerController::ProcessMessage( COSWindow& Window, Cmp_long_ptr& lResult, unsigned int uMsg, Cmp_uint_ptr wParam, Cmp_long_ptr lParam ) { _WINQ_FCONTEXT( "CPointerController::ProcessMessage" ); bool bProcessed = ProcessHook( Window, lResult, uMsg, wParam, lParam ); switch ( uMsg ) { case COSWindow::wmMouseMove: { OnMouseMove( Window, wParam, lParam ); lResult = 0; bProcessed = true; } break; case COSWindow::wmLButtonDown: { OnLButtonDown( Window, wParam, lParam ); lResult = 0; bProcessed = true; } break; case COSWindow::wmLButtonUp: { OnLButtonUp( Window, wParam, lParam ); lResult = 0; bProcessed = true; } break; case COSWindow::wmLButtonDblClk: { OnLButtonDblClk( Window, wParam, lParam ); lResult = 0; bProcessed= true; } break; case COSWindow::wmRButtonDown: { OnRButtonDown( Window, wParam, lParam ); lResult = 0; bProcessed = true; } break; case COSWindow::wmRButtonUp: { OnRButtonUp( Window, wParam, lParam ); lResult = 0; bProcessed = true; } break; case COSWindow::wmRButtonDblClk: { OnRButtonDblClk( Window, wParam, lParam ); lResult = 0; bProcessed= true; } break; case COSWindow::wmMButtonDown: { OnMButtonDown( Window, wParam, lParam ); lResult = 0; bProcessed = true; } break; case COSWindow::wmMButtonUp: { OnMButtonUp( Window, wParam, lParam ); lResult = 0; bProcessed = true; } break; case COSWindow::wmMButtonDblClk: { OnMButtonDblClk( Window, wParam, lParam ); lResult = 0; bProcessed= true; } break; #if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400) case COSWindow::wmMouseWheel: { OnMouseWheel( Window, wParam, lParam ); lResult = 0; bProcessed = true; } break; #endif case COSWindow::wmCaptureChanged: { COSWindow::refType refWindow = COSWindow::FromHandle( CWindowHandle( 0, (void*)(lParam) ).Ref() ); OnCaptureChanged( Window, refWindow ); lResult = 0; bProcessed = true; } break; #if((_WIN32_WINNT >= 0x0400) || (WINVER >= 0x0500)) case COSWindow::wmMouseHover: { OnMouseHover( Window, wParam, lParam ); lResult = 0; bProcessed = true; } break; case COSWindow::wmMouseLeave: { OnMouseLeave( Window ); lResult = 0; bProcessed = true; } break; #endif } return bProcessed; }
bool CUIMainDialog::MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { // Mouse messages switch(uMsg) { case WM_LBUTTONDOWN: case WM_MBUTTONDOWN: case WM_RBUTTONDOWN: SetCapture(hWnd); break; case WM_LBUTTONUP: case WM_MBUTTONUP: case WM_RBUTTONUP: ReleaseCapture(); break; } switch(uMsg) { case WM_MOUSEMOVE: case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_RBUTTONDOWN: case WM_RBUTTONUP: case WM_LBUTTONDBLCLK: case WM_MBUTTONDBLCLK: case WM_RBUTTONDBLCLK: case WM_MOUSEWHEEL: { POINT mousePoint = { short(LOWORD(lParam)), short(HIWORD(lParam)) }; switch(uMsg) { case WM_LBUTTONDBLCLK: OnLButtonDblClk(mousePoint); break; case WM_LBUTTONDOWN: OnLButtonDown(mousePoint); break; case WM_LBUTTONUP: OnLButtonUp(mousePoint); break; case WM_RBUTTONDBLCLK: OnRButtonDblClk(mousePoint); break; case WM_RBUTTONDOWN: OnRButtonDown(mousePoint); break; case WM_RBUTTONUP: OnRButtonUp(mousePoint); break; case WM_MBUTTONDBLCLK: OnMButtonDblClk(mousePoint); break; case WM_MBUTTONDOWN: OnMButtonDown(mousePoint); break; case WM_MBUTTONUP: OnMButtonUp(mousePoint); break; case WM_MOUSEMOVE: OnMouseMove(mousePoint); break; case WM_MOUSEWHEEL: //GetCursorPos(&mousePoint); ::ScreenToClient(hWnd,&mousePoint); OnMouseWheel(mousePoint,(short) HIWORD(wParam)); break; } } break; } UISetHWND(hWnd); // Let the CUIIMEEditBox's static message proc handle the msg. // This is because some IME messages must be handled to ensure // proper functionalities and the static msg proc ensures that // this happens even if no control has the input focus. if(CIME::StaticMsgProc(uMsg, wParam, lParam)) { //return true; } switch(uMsg) { case WM_SIZE: { RECT rc= {0,0,LOWORD(lParam), HIWORD(lParam)}; OnSize(rc); } break; case WM_ACTIVATEAPP: // Call OnFocusIn()/OnFocusOut() of the control that currently has the focus // as the application is activated/deactivated. This matches the Windows // behavior. if(s_pControlFocus && s_pControlFocus->GetEnabled()) { if(wParam) s_pControlFocus->OnFocusIn(); else s_pControlFocus->OnFocusOut(); } break; // Keyboard messages case WM_KEYDOWN: case WM_SYSKEYDOWN: case WM_KEYUP: case WM_SYSKEYUP: { // If a control is in focus, it belongs to this dialog, and it's enabled, then give // it the first chance at handling the message. if(s_pControlFocus && s_pControlFocus->GetEnabled()) { if(s_pControlFocus->HandleKeyboard(uMsg, wParam, lParam)) return true; } } break; case WM_CAPTURECHANGED: { // The application has lost mouse capture. // The dialog object may not have received // a WM_MOUSEUP when capture changed. Reset // m_bDrag so that the dialog does not mistakenly // think the mouse button is still held down. // if((HWND)lParam != hWnd) // { // SetPressed(false); // } // break; } } // 含焦点的控件 要优先处理消息 跨dialog处理 if(s_pControlFocus && s_pControlFocus->GetEnabled()) { // If the control MsgProc handles it, then we don't. if(s_pControlFocus->MsgProc(uMsg, wParam, lParam)) return true; } if(CUIDialog::MsgProc(hWnd, uMsg, wParam, lParam)) { return true; } //ClearState(); return false; }