vc 如何判断鼠标光标在某个矩形框内,如果在,显示一个子窗口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc 如何判断鼠标光标在某个矩形框内,如果在,显示一个子窗口相关的知识,希望对你有一定的参考价值。

参考技术A 用BOOL GetCursorPos( LPPOINT lpPoint);得到鼠标的坐标。
然后用BOOL PtInRect(
CONST RECT *lprc, // rectangle
POINT pt // point
);
判断这个点是不是在指点的矩形里。如个在显示子窗口。
参考技术B 也可以在MouseMove 中进行判断,鼠标的位置MouseMove的参数自动给你 参考技术C GetCursorPos获取鼠标坐标
PtInRect判断某个点是否在区域内
组合一下就搞定 了追问

GetCursorPos(&point);
CRect rc;
rc.left=0;
rc.top=70;
rc.right= rc.left+50;
rc.bottom= rc.top+200;
if(rc.PtInRect(point))

Cffdlg *pki=new Cffdlg;
pki->Create(IDD_DIALOG3,this);
pki->ShowWindow(SW_SHOW);

else

Cffdlg *pki=new Cffdlg;
pki->Create(IDD_DIALOG3,this);
pki->ShowWindow(SW_HIDE);

这样做对吗?为什么不显示呢?

追答

你是什么时候调用的这个操作啊;
标号@1有问题,每次都new一个?你可以创建一个,然后控制它显示、隐藏就行了,不用每次都创建。
下面更符合你的要求(响应WM_MOUSEMOVE消息):

LRESULT 你的窗口类::OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)

// TODO: Add your message handler code here and/or call default
POINT pt;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
CRect rc;
rc.left=0;
rc.top=70;
rc.right= rc.left+50;
rc.bottom= rc.top+200;
if(rc.PtInRect(pt))

Cffdlg *pki=new Cffdlg;//@1
pki->Create(IDD_DIALOG3,this);//@1
pki->ShowWindow(SW_SHOW);//显示

else

Cffdlg *pki=new Cffdlg;//@1
pki->Create(IDD_DIALOG3,this);//@1
pki->ShowWindow(SW_HIDE);//隐藏

return 0;

以上是关于vc 如何判断鼠标光标在某个矩形框内,如果在,显示一个子窗口的主要内容,如果未能解决你的问题,请参考以下文章

photoshop如何改变矩形线条颜色

如何在VC++ Win32应用程序中鼠标光标位置打印句子?

js如何判断光标是不是在某元素上

检测鼠标光标何时在 Qt5 和 QML 中的不规则形状图片上

判断任意一点是否在矩形内(矩形可能与坐标轴有一定夹角)

如何围绕当前光标在MFC中的位置绘制一个矩形