想实现一个指向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之上?或者用别的方式来实现?谢谢!!
设想通过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之上?或者用别的方式来实现?谢谢!!
pWnd->GetClientRect(&rect);对应关系不对。
如果有你可以用以下函数:
GetCursorPos // 获取当前鼠标位置(屏幕坐标)
pWnd -> GetClientRect( &rc );
pWnd -> ClientToScreen( &rc );然后
rc.PtInRect试试,祝你好运。
说得很对,point位置 是相对于窗体的,而pWnd->GetClientRect(&rect)所获得的rect是相对于按扭的,所以对应关系的确不对!但是,当我用CRect rect( , , , ,)(按钮的绝对坐标,或者说相对窗体的坐标)生成一个rect对象后,其实也并没有真正发挥作用!就如同 zhang_zhibin(阿笨猫) 说的那样,可能当鼠标在按钮上Move时没有消息发送到对话框.不知道这种方式是不是有问题,是否该用别的方式来实现,如何实现,请高手指条明路!!谢谢!!
在函数OnMouseMove(,,)的刚开始加入 SetCapture ();在函数OnMouseMove(,,)的结束处加入 ReleaseCapture ();
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);