响应WM_NCHITTEST消息
ON_WM_NCHITTEST()UINT CMailDlg::OnNcHitTest(CPoint point) 
{
// 非用户区移动窗口
UINT nHitTest = CDialog::OnNcHitTest(point);
return(nHitTest == HTCLIENT) ? HTCAPTION : nHitTest;
}

解决方案 »

  1.   

    请看此页下端的“程序员大本营”的“Visual C++”的“VC源码集合”的“对话框处理”的“Dragging a dialog by clicking anywhere on it”样例!
      

  2.   

    上述技术有两点不利之处:
    其一,当用户在客户区域双击时,窗口将变成最大;
    其二,它不适合于包含几个视窗的主框架窗口。
    还有一种方法,当用户按下鼠标左键使主框架窗口认为鼠标在其窗口标题上,使用ClassWizard在视窗中处理WM_LBUTTODOWN信息并向主框架窗口发送一个WM_NCLBUTTONDOWN信息和一个单击测试HTCAPTION。
    void CSampleView::OnLButtonDown(UINT nFlags, CPoint point)
    {
    CView::OnLButtonDown(nFlags, point);// Fool frame window into thinking someone clicked on
    // its caption bar
    GetParentFrame( )->PostMessage(WM_NCLBUTTONDOWN,
    HTCAPTION, 
    MAKELPARAM(point.x, point.y));
    }
    该技术也适用于对话框和基于对话框的应用程序,只是不必调用CWnd::GetParentFrame( )。void CSampleDialog::OnLButtonDown(UINT nFlags, CPoint point)
    {
    CDialog::OnLButtonDown(nFlags, point);
    // Fool dialog into thinking someone clicked on
    // its caption bar
    PostMessage(WM_NCLBUTTONDOWN, 
    HTCAPTION,
    MAKELPARAM(point.x, point.y));
    }