对话框有标题栏,不能去掉,也不能全屏。怎么禁止鼠标拖动窗口?

解决方案 »

  1.   

    处理OnNcHitTest函数, 写上 return HTCLIENT; 
      

  2.   

    在WM_HITTEST对应的消息处理函数OnNcHitTest中直接返回TRUE, 或者当指向对话框标题栏时,返回客户区的值HTCLIENT
    UINT CXXXDlg::OnNcHitTest(CPoint point) 
    {
        // TODO: Add your message handler code here and/or call default
        
        return HTCLIENT;
    }
      

  3.   

    我添加了这个消息函数OnNcHitTest,怎么提示error C3861: “ON_WM_NCHITTEST”: 找不到标识符。
      

  4.   

    做的是属性表单,class CSheetP : public CPropertySheet
                  class CPageOne : public CPropertyPage
                  class CPageTWO : public CPropertyPage
    应该在哪个中添加消息函数?
      

  5.   


    你应该响应主对话框的 OnNcHitTest, 而不是属性页。
      

  6.   

    奇怪了,在主对话框中添加消息OnNcHitTest响应函数,还是提示错误
    1>------ 已启动生成: 项目: test, 配置: Debug Pocket PC 2003 (ARMV4) ------
    1>正在编译...
    1>testDlg.cpp
    1>.\testDlg.cpp(33) : error C3861: “ON_WM_NCHITTEST”: 找不到标识符
    1>.\testDlg.cpp(34) : error C2143: 语法错误 : 缺少“}”(在“{”的前面)
    1>.\testDlg.cpp(34) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
    1>.\testDlg.cpp(34) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
    1>.\testDlg.cpp(34) : error C2653: “TheBaseClass”: 不是类或命名空间名称
    1>.\testDlg.cpp(34) : error C2065: “GetThisMessageMap”: 未声明的标识符
    1>.\testDlg.cpp(34) : error C2065: “_messageEntries”: 未声明的标识符
    1>.\testDlg.cpp(34) : error C2059: 语法错误 : “return”
    1>.\testDlg.cpp(34) : error C2059: 语法错误 : “}”
    1>.\testDlg.cpp(34) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
    1>.\testDlg.cpp(34) : error C2059: 语法错误 : “}”
    1>.\testDlg.cpp(40) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
    1>.\testDlg.cpp(40) : error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
    1>.\testDlg.cpp(87) : error C2039: “OnNcHitTest”: 不是“CDialog”的成员
    1>        C:\Program Files\Microsoft Visual Studio 9.0\VC\ce\atlmfc\include\afxwin.h(3425) : 参见“CDialog”的声明
    1>生成日志保存在“file://d:\练习\test\test\Pocket PC 2003 (ARMV4)\Debug\BuildLog.htm”
    1>test - 14 个错误,0 个警告
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
      

  7.   

    难道Pocket PC 2003 不兼容
      

  8.   

    晕死,楼主位提到过PPC吗?如果是PPC,不支持我提到的方法。
      

  9.   

    不要意思啊,没说清楚。如果是PPC的话那应该怎么做?
      

  10.   

    在对话框初始化时加上ModifyStyleEx(0,   WS_EX_NODRAG,   0);即可。
      

  11.   

    哈哈,何止是Pocket PC 2003,Windows Mobile 6也不支持:)我之前也曾想用WM_NCHITTEST,可惜没有~~~
      

  12.   


    难道是PPC的问题?我用WinCE,是不会出现这个问题的。
      

  13.   

    不知道怎么能让任务栏对话框一直在下面显示,难道先全屏再用::SetWindowPos把任务栏显示出来
      

  14.   

    我没有模拟器,估计你隐藏了系统任务栏,调用全屏时系统API不会减去系统任务栏的高度,自己MoveWindow,计算长宽高。
      

  15.   

    PPC新建窗口是默认全屏吧,你改变这个默认行为,然后自己改变窗口大小。
      

  16.   

    你仔细看下MSDN中的ModifyStyleEx。应该是可以的,我没法测试。关键是这个
    nFlags
    Flags to be passed to SetWindowPos, or zero if SetWindowPos should not be called. The default is zero. See the Res section for a list of preset flags.你试试,我也想知道结果。
      

  17.   

    在对话框的OnCreate中调用ModifyStyleEx
      

  18.   

    可以了,我这样做,窗口既有标题栏,也不能移动
                ModifyStyleEx(0, WS_EX_NODRAG,0);
              ::SetWindowPos(this->m_hWnd,HWND_TOPMOST,0,0,240,293,SWP_SHOWWINDOW);
      

  19.   

    首先要用WM_NCHITTEST的Message
    然后修改LRESULT CXXDlg::OnNcHitTest(CPoint point)函数,具体修改成如下:
    LRESULT CXXDlg::OnNcHitTest(CPoint point)
    {
    // TODO: Add your message handler code here and/or call default
    if((CDialogEx::OnNcHitTest(point))==2)
       {
    return 0;
       }
    else {
    return CDialogEx::OnNcHitTest(point);
      }
    }

    我试过,这样就可以,如果还不行,请回复我,我在帮你试试