简单问题,如何判断POINT是否在一个客户区域中?

robinford 2003-07-29 02:17:42
比如:要判断鼠标是不是在一个对话框的某个EDIT内,要怎么办?
...全文
77 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
robinford 2003-07-30
  • 打赏
  • 举报
回复
偶已经搞定了,不是用的上面的方法,其实本来处理的时候就有问题。因为消息是发给CEDIT的,所以只要派生一个CEDIT的类来处理就很轻松了(直接重载CMYSTATIC的ONMOUSEMOVE很简单就搞定了)。。。唉。。。可惜早点没想到啊。放分了放分。
思危 2003-07-29
  • 打赏
  • 举报
回复
你可以把该点坐标转为屏幕的
dz_w 2003-07-29
  • 打赏
  • 举报
回复
当然,如果你是在MOUSEMOVE中处理,那么CPoint point是已有的。可以先GetWindowRect,然后ScreenToClient转化一下然后再用PtInRect判断
edrftgyh 2003-07-29
  • 打赏
  • 举报
回复
那你就用GetClientRect()试试啊!
dz_w 2003-07-29
  • 打赏
  • 举报
回复
POINT pt;
RECT rect;
::GetWindowRect(::GetDlgItem(IDC_EDIT), &rect);
::GetCursorPos(&pt);
if(::PtInRect(&rect, pt)) //如果在框内
...........
你的操作
...........
robinford 2003-07-29
  • 打赏
  • 举报
回复
不对,我试过了。
我在MOUSEMOVE中测试过
GetWindowRect(RECT)取得的是SCREEN坐标,POINT是CLIENT坐标,但是把RECT转换成CLIENT一样仍然不对。是为什么?
godsmile 2003-07-29
  • 打赏
  • 举报
回复
函数不外乎下面几个

GetClientRect( LPRECT lpRect )
GetWindowRect( LPRECT lpRect )
ClientToScreen( LPPOINT lpPoint )
ScreenToClient( LPPOINT lpPoint )

CRect::PtInRect( POINT point )

关键看你的具体情况来用!
wxfjb 2003-07-29
  • 打赏
  • 举报
回复
GetWindowRect()
PtInRect()

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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