鼠标位置捕获的问题,当它离开窗体后!

dgcat_6 2001-07-18 10:00:04
在一个基于Dialog的对序程序中,我如何获得鼠标离开窗体后的鼠标坐标,我在窗体时使用SetCapture()捕获了,离开窗体如果未右键按下放开不会释放捕获,但没有作用!好象要用HOOK,但我一点都不会用,能否告诉我,该怎样做,不要太高深,简单些好,我水平有限!多谢合作!
...全文
237 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
azuo_lee 2001-07-19
  • 打赏
  • 举报
回复
SetCapture不是没问题,是有很大的问题!在Win16下SetCapture一切工作正常,但在Win32下SetCapture只能捕获到本进程创建的窗口,对其他进程的窗口无能为力。只有一种情况例外:就是像Spy++中那样,按下鼠标键不要释放,此时能捕捉到WM_MOUSEMOVE和最后的WM_LBUTTONUP消息。
你如果是类似Spy++中那样的情况,可以用SetCapture,否则只有用Hook了。
dgcat_6 2001-07-19
  • 打赏
  • 举报
回复
我再试试!估计是我的代码出了问题!
dgcat_6 2001-07-18
  • 打赏
  • 举报
回复
allisone:问题是我离开窗体后窗体怎样得到消息?只有得到不在该窗体的消息时,我才能针对消息处理GETCURPOS呀!不知我说明白没有!

鼠标离开窗体A,A如何继续接受消息?是哪个消息或过程来处理?
dgcat_6 2001-07-18
  • 打赏
  • 举报
回复
没有用!在WM_MOUSEMOVE只能处理当前当前窗体的消息!离开窗体后,它接受不到该消息
onjun 2001-07-18
  • 打赏
  • 举报
回复
应该是wm_mousemove
onjun 2001-07-18
  • 打赏
  • 举报
回复
鼠标在窗体中:
添加wm_move消息,在OnMove处理函数中能得到鼠标位置。
allisone 2001-07-18
  • 打赏
  • 举报
回复
GetCursorPos
This function retrieves the cursor’s position, in screen coordinates.

BOOL GetCursorPos(
LPPOINT lpPoint);
Parameters
lpPoint
[out] Long pointer to a POINT structure that receives the screen coordinates of the cursor.
Return Values
Nonzero indicates success. Zero indicates failure. To get extended error information, call GetLastError.
dgcat_6 2001-07-18
  • 打赏
  • 举报
回复
怎么用?给点说明!
gbstar2021 2001-07-18
  • 打赏
  • 举报
回复
SetWindowsHookEx
111222 2001-07-18
  • 打赏
  • 举报
回复
利用_TrackMouseEvent

具体实现:

//填加消息映射
//.......

ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)

//.......
//消息映射结束

void CSpDlg::OnMouseMove(UINT nFlags, CPoint point)
{
TRACKMOUSEEVENT stTRACKMOUSEEVENT;
stTRACKMOUSEEVENT.cbSize = sizeof(stTRACKMOUSEEVENT);
stTRACKMOUSEEVENT.hwndTrack=m_hWnd;
stTRACKMOUSEEVENT.dwFlags=TME_LEAVE;
_TrackMouseEvent(&stTRACKMOUSEEVENT);
CDialog::OnMouseMove(nFlags, point);
}

LRESULT CSpDlg::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{

/*这里检查鼠标位置

是为了避免鼠标滑过控件时候产生的WM_MOUSELEAVE干扰正常应用*/

POINT pt;
RECT rcWindow;
GetWindowRect( &rcWindow );
GetCursorPos( &pt );
if(pt.x > rcWindow.right ¦¦ pt.x < rcWindow.left
¦¦ pt.y < rcWindow.top ¦¦ pt.y > rcWindow.bottom)/*当鼠标移动到窗口矩形外*/
MessageBox("鼠标离开了对话框",NULL,MB_OK);
return 0;
}


////////////
另外SetCapture也是适用的,你用的有问题
ShowMeTheMoney 2001-07-18
  • 打赏
  • 举报
回复
SetCapture,我用过的!/
行!/
vcbacker 2001-07-18
  • 打赏
  • 举报
回复
SetCapture 没问题
Chice_wxg 2001-07-18
  • 打赏
  • 举报
回复

SetCapture肯定管用!我亲自试过,程序可以象Spy++一样定位其他程序窗口

估计是你的代码不对……

dgcat_6 2001-07-18
  • 打赏
  • 举报
回复
我期盼着答案。。。。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧