这样改改试试:void CAutoDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
CRect rect;
GetDlgItem(IDOK)->GetWindowRect(&rect); //响应确定按钮
if(rect.PtInRect(point))
PostMessage(WM_CLOSE);
CDialog::OnMouseMove(nFlags, point);
}

解决方案 »

  1.   

    坐标问题:
    OnMouseMove传进来的不是屏幕坐标。
    CPoint pt = point;
    ClientToScreen(&pt);
    GetDlgItem(IDOK)->GetWindowRect(&rect); //响应确定按钮
    if(rect.PtInRect(pt))
    PostMessage(WM_CLOSE);
      

  2.   

    CPoint pt = point;
    GetDlgItem(IDOK)->GetClientRect(&rect); //响应确定按钮
    if(rect.PtInRect(pt))
    PostMessage(WM_CLOSE);
      

  3.   

    dockbar(dock),这样不对。
    他是处理dialog的WM_MOUSEMOVE,point是dialog客户区坐标,而不是button的。
      

  4.   

    呵呵,是不行。mouse在子控件上移动时,dialog收不到WM_MOUSEMOVE消息。
    可以从CButton派生一个类CMyBtn,处理WM_MOUSEMOVE消息:
    GetParent()->PostMessage(WM_CLOSE);
    然后在dialog中加入一个变量:CMyBtn m_btn;
    在OnInitDialog中m_btn.SubclassDlgItem(IDOK, this);
      

  5.   

    再这样修改试试:void CAutoDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    CRect rect;
    GetDlgItem(IDOK)->GetWindowRect(&rect); //响应确定按钮
    ScreenToClient(&rect);
    if(rect.PtInRect(point))
    PostMessage(WM_CLOSE);
    CDialog::OnMouseMove(nFlags, point);
    }
      

  6.   

    void CAutoDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
       CDialog::OnOK();
    }
      

  7.   

    当你的鼠标在按钮上移动的时候,对话框是收不到WM_MOUSEMOVE消息的。
      

  8.   

    yu_hl()大哥,你好!我试了一下你给的代码,是对的。但是m_btn.SubclassDlgItem(IDOK, this);这个函数我不太明白是什么意思,查了MSDN还是不太懂。
      

  9.   

    如果是窗口右上角的关闭按钮,那你得用WM_NCMOUSEMOVE
    如果是窗口内部的按钮,建议你用PreTranslateMessage截获WM_MOUSEMOVE 消息:
    if (pMsg->hWnd==GetDlgItem(your button id)->GetSafeHWnd()&&
        pMsg->message==WM_MOUSEMOVE) PostMessage(WM_CLOSE);