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 如何判断鼠标光标在某个矩形框内,如果在,显示一个子窗口的主要内容,如果未能解决你的问题,请参考以下文章