我想控制鼠标在某个界面上的移动,可惜用mouse_event虽然行但是鼠标移动是全局有效的。用::PostMessage(hwnd,WM_MOUSEMOVE,0,MAKELPARAM(100,100));却不行 请问错在哪里呢。
如果能有其他方法让mouse_event发出的消息只对hwnd有效也可以

解决方案 »

  1.   

    HWND SetCapture(
      HWND hWnd   // handle to window
    );
    Parameters
    hWnd 
    [in] Handle to the window in the current thread that is to capture the mouse. 
    Return Values
    The return value is a handle to the window that had previously captured the mouse. If there is no such window, the return value is NULL. 用完以后BOOL ReleaseCapture(VOID);
      

  2.   


    CRect rc;
    GetWindowRect(&rc);
    ClipCursor(&rc);
    CPoint pt;//赋你要移动的鼠标位置
    SetCursorPos(pt);   //你会看到鼠标移动范围被限制在本窗口内
    ClipCursor(NULL); //接除对鼠标移动范围的限制
      

  3.   

    楼上的再加上
    SetCursorPos(380,175);
      

  4.   

    ::PostMessage(hwnd,WM_MOUSEMOVE,0,MAKELPARAM(100,100));当然不行,这个消息不能用于控制光标的移动,它是用来通知窗口光标已被移动了的。
      

  5.   

    SetCapture 是用来设置捕获鼠标消息窗口的,默认鼠标消息发给在光标之下的窗口,但设置捕获之后,系统会将所有的鼠标消息都发给你所设置的窗口,而不是光标下的窗口。所以使用之后要BOOL ReleaseCapture(VOID),否则其他窗口就得不到鼠标消息了。SetCapture/ReleasesCapture也不是用来控制光标位置的
      

  6.   

    我是要在一个全屏的界面上长时间频繁做鼠标的移动和单击的动作,这个界面有自己的鼠标系统用mouse_event虽然可以实现鼠标动作,但是那个界面就得一直处于前端状态,做不了其他的事情。
    想把mouse_event产生的消息直接发给这个界面,就用了postmessage函数,但是鼠标没法移动,其中一句有效 ::PostMessage(hwnd,WM_LBUTTONDOWN,01,0); (该界面不处于活动时候也有鼠标点击的消息,不会把我当前的工作窗口无效掉)
    所以用setcapture
      

  7.   

    所以不想用SetCapture,那样我当前的工作窗口也用不了鼠标了。
      

  8.   

    我是要在一个全屏的界面上长时间频繁做鼠标的移动和单击的动作,这个界面有自己的鼠标系统用mouse_event虽然可以实现鼠标动作,但是那个界面就得一直处于前端状态,做不了其他的事情。
    想把mouse_event产生的消息直接发给这个界面,就用了postmessage函数,但是鼠标没法移动,其中一句有效 ::PostMessage(hwnd,WM_LBUTTONDOWN,01,0); (该界面不处于活动时候也有鼠标点击的消息,不会把我当前的工作窗口无效掉)所以不想用SetCapture,那样我当前的工作窗口也用不了鼠标了。