一个对话框界面,上面有三个Button。
我想当鼠标移动到每个Button上时,会有不同的Static内容出现。因此,想在Dialog上捕捉鼠标位置。但是当鼠标移动到Button上时,这个OnMouseMove事件就不会响应了。所以也就弹不出对话框"aa"。怎么办?
下面是个测试的部分程序。void CThreeInOneDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
CPoint rect_point;
RECT rect;

GetDlgItem(IDC_BUTTON_FILEB)->GetWindowRect(&rect);
ScreenToClient(&rect);

int x = point.x;
int y = point.y; if( (x > rect.left  ) && (x < rect.right )&& (y < rect.bottom ) && ( y > rect.top ))
AfxMessageBox("aa"); 
}

解决方案 »

  1.   

    用WindowFromPoint函数返回一个指向窗口的指针,然后用这个指针操作就可以了
      

  2.   

    1楼的,我不是很明白你的意思当鼠标在Button上移动时,对话框的Mouse Move事件不会响应。也就是说当鼠标在Button上移动时,我上面那段程序根本就进不去。我想当鼠标在Button上移动时,同样捕捉Mouse Move事件,怎么办?
      

  3.   

    1. 可以分别响应Button和对话框的Mouse Move来得到你要的效果。
    2. 也可以在对话框中加入WM_Timer,在OnTimer里面用WindowFromPoint获取当前所在的按钮。
      

  4.   

    处理对话框PreTranslateMessage(MSG* pMsg),你想怎么干都行
      

  5.   

    AfxMessageBox("aa"); 会将线程阻死的。
      

  6.   

    方法有多种:
    1:处理PreTranslateMessage
    2:加timer,用GetCursorPos获取鼠标位置,用GetWindowRect获取窗口矩形框,再用CRect中的IsPointIn(好象是这个函数)判断鼠标是否在窗口内。
    3:处理鼠标钩子函数。
    当然第一种简单得多。
      

  7.   

    PreTranslateMessage确实是很好用~~~