想实现一个指向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之上?或者用别的方式来实现?谢谢!!

解决方案 »

  1.   

    point位置 是相对于 窗体的
    pWnd->GetClientRect(&rect);对应关系不对。
      

  2.   

    问题是你响应的是对话框的OnMouseMove,当鼠标在打按钮上Move时是否有消息发送到对话框?
    如果有你可以用以下函数:
    GetCursorPos // 获取当前鼠标位置(屏幕坐标)
    pWnd -> GetClientRect( &rc );
    pWnd -> ClientToScreen( &rc );然后
    rc.PtInRect试试,祝你好运。
      

  3.   

    daylight1980(红星照我去战斗)
    说得很对,point位置 是相对于窗体的,而pWnd->GetClientRect(&rect)所获得的rect是相对于按扭的,所以对应关系的确不对!但是,当我用CRect rect( , , , ,)(按钮的绝对坐标,或者说相对窗体的坐标)生成一个rect对象后,其实也并没有真正发挥作用!就如同 zhang_zhibin(阿笨猫) 说的那样,可能当鼠标在按钮上Move时没有消息发送到对话框.不知道这种方式是不是有问题,是否该用别的方式来实现,如何实现,请高手指条明路!!谢谢!!
      

  4.   


    在函数OnMouseMove(,,)的刚开始加入 SetCapture ();在函数OnMouseMove(,,)的结束处加入 ReleaseCapture ();
      

  5.   

    这样取按钮区域:
    pWnd->GetWindowRect(&rect);
    ScreenToClient(&rect);
      

  6.   

    按照 zhang_zhibin(阿笨猫) 所说的pWnd -> ClientToScreen( &rc );,经过转换,可以将相对于button的坐标转换为基于窗体的坐标.谢谢!根据 fupinger(小古)所说,加入SetCapture ()和ReleaseCapture (),可以使得指向按钮的时候显示消息了。问题消息的显示有写错位,不知道什么原因,这个我再看看! wangjinwang(王进) 所说的,我好象没有太看懂.pWnd->GetWindowRect(&rect),这样选作用是什么?首先谢谢各位的热心帮助,请问有没有更好的方式在VC中实现指向按钮时,能在别的控件内显示该按钮相关信息的好的方式呢?