我做了个基于Dialog的MFC程序,请教如何让该窗口不能移动?

解决方案 »

  1.   

    处理WM_NCHITTEST消息,限制窗口改变大小或者移动:UINT CMainFrame::OnNcHitTest(CPoint point)
    {
    UINT hit = CFrameWnd::OnNcHitTest(point);
    #ifdef _DEBUG
    // For debugging, display default hit code
    LPCTSTR s = "Unknown";
    for (int i=0; HtCodes[i].name; i++) {
    if (hit == HtCodes[i].id) {
    s = HtCodes[i].name;
    break;
    }
    }
    TRACE(_T("CMainFrame::OnNcHitTest: %s"), s);
    #endif // disallow these codes: map to HTNOWHERE
    static char DisallowCodes[] = {
    HTLEFT,HTRIGHT,HTTOP,HTTOPLEFT,HTTOPRIGHT,
    HTBOTTOM,HTBOTTOMLEFT,HTBOTTOMRIGHT,HTSIZE,HTCAPTION }; if (strchr(DisallowCodes, hit)) {
    TRACE(" -- disallowed\n");
    return HTBORDER;
    }
    TRACE("\n");
    return hit;
    }
      

  2.   

    to:kugou123(酷狗)我的是基于Dialog的,我没有找到CMainFrame这个类,好象也没有WM_NCHITTEST消息
      

  3.   

    基于Dialog的肯定找不到咯,呵呵
      

  4.   

    我帮楼主找到了办法,
    重载对话框的左键消息函数:OnNcLButtonDown,注释掉其中调用父类消息函数的语句,如
    //CMDIChildWnd::OnNcLButtonDown(nHitTest, point);
      

  5.   

    或者在应用类中重载系统命令消息函数OnSysCommand(UINT nID, LPARAM lParam)
    , if(nID!=61458)//61458应该是左键单击ID,我不知道移动窗口的命令ID是多少
    CDialog::OnSysCommand(nID, lParam);
    屏蔽移动命令
      

  6.   

    agree to domustdohz(迷茫)
    把对话框的Border属性设为None,自己再画一个标题栏
      

  7.   

    别死心眼,你还想在非客户区做什么?
    if(nHitTest!=HTCAPTION)
    --
    To楼上的:这样会不会连点击最大最小和关闭窗口都不行了。
      

  8.   

    将窗口Border设置为Dialog FrameLRESULT CTESTDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if (wParam!=HTCAPTION)
      return CDialog::DefWindowProc(message, wParam, lParam);
    }