为什么用CRect选择后,不能通过判断鼠标在CRect区域内,触发OnMouseMove的操作??

swirl0626 2003-10-21 10:01:48
想实现一个指向Button就在另外一个控件内显示该按钮作用的功能.
设想通过MouseMove消息,当鼠标指向按扭时,根据鼠标Point是否在按扭所在的CRect区域内,判断是否该触发显示.

核心代码如下:
void CMy1Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
// 获取BUTTON句柄
pWnd = GetDlgItem(IDC_BUTTON1);

// 获取BUTTON所在区域
pWnd->GetClientRect(&rect);

//如过鼠标当前在rect区域内,则在另外一个控件内显示按扭的作用inf
if(rect.PtInRect (point))
{
((CEdit*)GetDlgItem(IDC_Show))->SetWindowText(inf);
}

CDialog::OnMouseMove(nFlags, point);

}

当前的问题:
当CRect区域与Button区域重合时,检测不到MouseMove消息,因此无法触发相应的显示操作.

是否存在一个函数或控制参数,能将CRect置于Button之上?

或者用别的方式来实现?

谢谢!!

...全文
82 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤必有邻 2003-10-21
  • 打赏
  • 举报
回复
这样取按钮区域:
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);
fupinger 2003-10-21
  • 打赏
  • 举报
回复

在函数OnMouseMove(,,)的刚开始加入 SetCapture ();

在函数OnMouseMove(,,)的结束处加入 ReleaseCapture ();
swirl0626 2003-10-21
  • 打赏
  • 举报
回复
daylight1980(红星照我去战斗)
说得很对,point位置 是相对于窗体的,而pWnd->GetClientRect(&rect)所获得的rect是相对于按扭的,所以对应关系的确不对!

但是,当我用CRect rect( , , , ,)(按钮的绝对坐标,或者说相对窗体的坐标)生成一个rect对象后,其实也并没有真正发挥作用!

就如同 zhang_zhibin(阿笨猫) 说的那样,可能当鼠标在按钮上Move时没有消息发送到对话框.

不知道这种方式是不是有问题,是否该用别的方式来实现,如何实现,请高手指条明路!!

谢谢!!
zhang_zhibin 2003-10-21
  • 打赏
  • 举报
回复
问题是你响应的是对话框的OnMouseMove,当鼠标在打按钮上Move时是否有消息发送到对话框?
如果有你可以用以下函数:
GetCursorPos // 获取当前鼠标位置(屏幕坐标)
pWnd -> GetClientRect( &rc );
pWnd -> ClientToScreen( &rc );

然后
rc.PtInRect

试试,祝你好运。
daylight1980 2003-10-21
  • 打赏
  • 举报
回复
point位置 是相对于 窗体的
pWnd->GetClientRect(&rect);对应关系不对。
swirl0626 2003-10-21
  • 打赏
  • 举报
回复
按照 zhang_zhibin(阿笨猫) 所说的pWnd -> ClientToScreen( &rc );,经过转换,可以将相对于button的坐标转换为基于窗体的坐标.谢谢!

根据 fupinger(小古)所说,加入SetCapture ()和ReleaseCapture (),可以使得指向按钮的时候显示消息了。问题消息的显示有写错位,不知道什么原因,这个我再看看!

wangjinwang(王进) 所说的,我好象没有太看懂.pWnd->GetWindowRect(&rect),这样选作用是什么?

首先谢谢各位的热心帮助,请问有没有更好的方式在VC中实现指向按钮时,能在别的控件内显示该按钮相关信息的好的方式呢?

15,980

社区成员

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

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