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

dgcat_6 2001-07-18 10:00:04
在一个基于Dialog的对序程序中,我如何获得鼠标离开窗体后的鼠标坐标,我在窗体时使用SetCapture()捕获了,离开窗体如果未右键按下放开不会释放捕获,但没有作用!好象要用HOOK,但我一点都不会用,能否告诉我,该怎样做,不要太高深,简单些好,我水平有限!多谢合作!
...全文
149 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
我期盼着答案。。。。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-07-18 10:00
社区公告

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