case WM_MOUSEMOVE:
...
return; //replace break;case WM_LBUTTONDOWN:
...
return; //replace break;case WM_LBUTTONUP:
...
return; //replace break;

解决方案 »

  1.   

    我的处理函数如下:请指教以下。LRESULT CTestDlg::OnMyMouseMove(WPARAM wParam, LPARAM lParam)
    {
    switch (wParam)
    {
    case 0: //WM_LBUTTONDOWN
    {
    if(!bMoving)
    {
    Start=false;
    bMoving=true;
    CPoint pXY;
    ::GetCursorPos(&pXY);
    m_StrokePoint->AddPoint(CPoint(pXY.x,pXY.y));
    }
    return 0;
    break;
    }

    case 1://鼠标移动事件WM_MOUSEMOVE
    {
    if(bMoving)
    {  
    CDC *pDC;
    pDC = CDC::FromHandle(::GetDC(NULL));
    CPen cNewPen(PS_SOLID,4,RGB(255,0,0)), *pOldPen;
    pOldPen = pDC->SelectObject(&cNewPen);
    CPoint pXY;
    ::GetCursorPos(&pXY);
    m_StrokePoint->AddPoint(CPoint(pXY.x,pXY.y));
    int nSize = m_StrokePoint->GetPointCount();
    pDC->MoveTo(m_StrokePoint->GetAt(nSize-2));
    pDC->LineTo(pXY.x,pXY.y);
    pDC->SelectObject(pOldPen);
    Start=false;
    }
    return 0;
    break;
    }
    case 2: //WM_LBUTTONUP
    {
    //StopHook(m_hWnd);
    if (bMoving) 
    {
    bMoving=false;
    m_StrokeArray.Add(m_StrokePoint);
    m_StrokePoint = new CElectricInkStrokeU();

    SetTimer(1,1000,NULL);
    Start=true;
    }
    return 0;
    break;
    }
    case 3://WM_RBUTTONDOUN
    return 0;
    break;
    }
    return 0;

      

  2.   

    上面的代码是hookproc的代码???
      

  3.   

    不是,它是消息处理函数。我想时不时在这儿改的。hookproc的代码如下:LRESULT WINAPI MouseProc(int nCode,WPARAM wparam,LPARAM lparam)
    {
    LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT FAR *)lparam;
    if (nCode>=0)
    {
    /*============================================================================
    如下代码是得到父窗口标题文本的做法
    HWND glhTargetWnd=pMouseHook->hwnd;     //取目标窗口句柄
    HWND ParentWnd=glhTargetWnd;
    while (ParentWnd !=NULL)
    {
    glhTargetWnd=ParentWnd;
    ParentWnd=GetParent(glhTargetWnd);   //取应用程序主窗口句柄
    }
    ===========================================================================*/
    HWND glhTargetWnd=XYZWindowFromPoint(NULL,pMouseHook->pt);    //用上面的一段注释掉的代码替换此行是得到父窗口标题文本的做法
    if(glhTargetWnd!=glhPrevTarWnd)
    {
    char szCaption[256];
    GetWindowText(glhTargetWnd,szCaption,100);
    //取目标窗口标题
    if(IsWindow(glhDisplayWnd))
    SendMessage(glhDisplayWnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szCaption);
    glhPrevTarWnd=glhTargetWnd;
    //保存目标窗口
    }
    }
    return CallNextHookEx(glhHook,nCode,wparam,lparam);
    //继续传递消息
    }
      

  4.   

    我把 return CallNextHookEx(glhHook,nCode,wparam,lparam);//继续传递消息
    替换成 break; 出现编译错误。( error C2043: illegal break)StartHook 如下:BOOL CMouseHook::StartHook(HWND hWnd)
    {
    BOOL bResult=FALSE; glhHook=SetWindowsHookEx(WH_MOUSE,MouseProc,glhInstance,0); if(glhHook!=NULL)
    bResult=TRUE;
    glhDisplayWnd=hWnd;

    return bResult; 
    }我是初学者请多指教。
      

  5.   

    除了最后一个return 0, 其余的统统换成 return 1 试一试
      

  6.   

    请看以下下面的HOOK代码,给你们的意见。谢谢!HINSTANCE hInst;
    UINT UWM_MOUSEMOVE;
    HHOOK hook;
    static LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam);BOOL APIENTRY DllMain( HINSTANCE hInstance, 
      DWORD  Reason, 
      LPVOID Reserved
      )
    {
    switch(Reason)
        { /* reason */
    case DLL_PROCESS_ATTACH:
    hInst = hInstance;
    UWM_MOUSEMOVE = RegisterWindowMessage(UWM_MOUSEMOVE_MSG);
    return TRUE;
    case DLL_PROCESS_DETACH:
    if(hWndServer != NULL)
    StopHook(hWndServer);
    return TRUE;
        } /* reason */
        return TRUE;
    }
    /****************************************************************************
    *                                 setMyHook
    * Inputs:
    *       HWND hWnd: Window to notify
    * Result: BOOL
    *       TRUE if successful
    * FALSE if error
    * Effect: 
    *       Sets the hook
    ****************************************************************************/__declspec(dllexport) BOOL StartHook(HWND hWnd)
    {
    if(hWndServer != NULL)
    return FALSE; // already hooked!
    hook = SetWindowsHookEx(WH_GETMESSAGE,
    (HOOKPROC)msghook,
    hInst,
    0);
    if(hook != NULL)
    { /* success */
    hWndServer = hWnd;
    return TRUE;
    } /* success */
    return FALSE; // failed to set hook
    } // setMyHook

      /****************************************************************************
      *                                 clearMyHook
      * Inputs:
      *       HWND hWnd: Window hook
      * Result: BOOL
      *       TRUE if successful
      * FALSE if error
      * Effect: 
      *       Removes the hook that has been set
    ****************************************************************************/__declspec(dllexport) BOOL StopHook(HWND hWnd)
    {
    if(hWnd != hWndServer || hWnd == NULL)
    return FALSE;
    BOOL unhooked = UnhookWindowsHookEx(hook);
    if(unhooked)
    hWndServer = NULL;
    return unhooked;
    } // StopHook

      /****************************************************************************
      *                                   msghook
      * Inputs:
      *       int nCode: Code value
      * WPARAM wParam:
      * LPARAM lParam:
      * Result: LRESULT
      *       Either 0 or the result of CallNextHookEx
      * Effect: 
      *       Hook processing function. If the message is a mouse-move message,
      * posts the coordinates to the parent window
    ****************************************************************************/static LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam)
    {
    if(nCode < 0)
    { /* pass it on */
    CallNextHookEx(hook, nCode, wParam, lParam);
    return 0;
    } /* pass it on */
    LPMSG msg = (LPMSG)lParam;

    switch(msg->message)
    {
    case WM_LBUTTONDOWN:
    {
    PostMessage(hWndServer, UWM_MOUSEMOVE, 0, 0);
    break;
    }
    case WM_MOUSEMOVE:
    case WM_NCMOUSEMOVE:
    {
    PostMessage(hWndServer, UWM_MOUSEMOVE, 1, 0);
    break;
    }
    case WM_LBUTTONUP:
    {
    PostMessage(hWndServer, UWM_MOUSEMOVE, 2, 0);
    break;
    }
    case WM_RBUTTONDOWN:
    {
    PostMessage(hWndServer, UWM_MOUSEMOVE, 3, 0);
    break;
    }
    case WM_RBUTTONUP:
    {
    PostMessage(hWndServer, UWM_MOUSEMOVE, 4, 0);
    break;
    }
    default:
    break;
    }

    return CallNextHookEx(hook, nCode, wParam, lParam);
    } // msghook
    return CallNextHookEx(hook, nCode, wParam, lParam); //replace return 0; 还是不行。