在对话框中放置一个静态控件,运行时,在对话框类中有没有办法知道鼠标已经进入了静态控件区域??前提是不能为静态控件派生一个类

解决方案 »

  1.   

    可以,得到控件的区域,mousemove的时候,看看鼠标在不在这个里面就行``
      

  2.   

    void CMainDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
              CRect rc; GetDlgItem(IDC_MY_STATIC)->GetWindowRect(&rc); ScreenToClient(&rc); if(rc.PtInRect(point)) //如果在指定静态控件的区域内
    {
                //执行相应操作
    } CDialog::OnMouseMove(nFlags, point);
    }
      

  3.   

    我刚刚了下面的代码~不知道有没有更简单的方法~~void CGgggDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    CRect rect; //用于获得静态控件的位置(基于窗口坐标的)
    GetDlgItem(IDC_STATICmy1)->GetWindowRect(&rect);//IDC_STATICmy1是静态控件ID
    ScreenToClient(&rect);//转换坐标为窗户区坐标 if (point.x>rect.left&&point.x<rect.right) {//判断坐标X是否在静态控件内
    if (point.y>rect.top&&point.y<rect.bottom) {//判断坐标Y是否在静态控件内
    MessageBox("鼠标位于静态控件内",NULL,MB_OK|MB_ICONINFORMATION);
    }
    }
    CDialog::OnMouseMove(nFlags, point);
    }
      

  4.   

    PtInRect函数~~~~呵呵,偷到了,我没学过这个~嘻嘻
      

  5.   

    矣,昨天我试了一下,不知道怎么不可以,代码也基本是这样写的。我以为鼠标在静态控件上时对话框就不响应MOUSEMOVE了(我获得静态控件的矩形是在OnInitDlg里获得的),谢谢