hur.cn - 华软网

 热门搜索

对话框有标题栏,怎么禁止鼠标拖动窗口

  作者:未知    来源:网络    更新时间:2010/9/19
对话框有题目栏,不能去掉,也不能全屏。怎么禁止鼠标拖动窗口?
---华软 网友回答---
措置惩罚WM_NCHITTEST即可

---华软网友回复---
措置惩罚OnNcHitTest函数, 写上 return HTCLIENT; 
---华软网友回复---
在WM_HITTEST对应的消息措置惩罚函数OnNcHitTest中直接前往TRUE, 或当指向对话框题目栏时,前往客户区的值HTCLIENT
UINT CXXXDlg::OnNcHitTest(CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    
    return HTCLIENT;
}


---华软网友回复---
我增加了这个消息函数OnNcHitTest,怎么提醒error C3861: “ON_WM_NCHITTEST”: 找不到标识符。
---华软网友回复---
做的是属性表单,class CSheetP : public CPropertySheet
              class CPageOne : public CPropertyPage
              class CPageTWO : public CPropertyPage
应该在哪一个中增加消息函数?
---华软网友回复---
引用 5 楼 xjcwzp 的回复:
做的是属性表单,class CSheetP : public CPropertySheet
  class CPageOne : public CPropertyPage
  class CPageTWO : public CPropertyPage
应该在哪一个中增加消息函数?


你应该响应主对话框的 OnNcHitTest, 而不是属性页。
---华软网友回复---
奇怪了,在主对话框中增加消息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 个 ==========
---华软网友回复---
难道Pocket PC 2003 不兼容
---华软网友回复---
引用 8 楼 xjcwzp 的回复:
难道Pocket PC 2003 不兼容



晕死,楼主位提到过PPC吗?

如果是PPC,不支持我提到的方法。
---华软网友回复---
不要意思啊,没说清楚。如果是PPC的话那应该怎么做?
---华软网友回复---
在对话框初始化时加上

ModifyStyleEx(0,   WS_EX_NODRAG,   0);

即可。
---华软网友回复---
引用 8 楼 xjcwzp 的回复:
难道Pocket PC 2003 不兼容

哈哈,何止是Pocket PC 2003,Windows Mobile 6也不支持:)我之前也曾想用WM_NCHITTEST,惋惜没有~~~
---华软网友回复---
引用 11 楼 alexmayer 的回复:
在对话框初始化时加上

ModifyStyleEx(0, WS_EX_NODRAG, 0);

即可。


这样做就全屏了,把自己下面做的工具栏也笼罩了
---华软网友回复---
错了,是把下面任务栏给笼罩了
---华软网友回复---
这样吧,对话框照旧设计成无题目栏的,然后自己自画模拟成题目栏。
---华软网友回复---
引用 14 楼 xjcwzp 的回复:
错了,是把下面任务栏给笼罩了


难道是PPC的问题?我用WinCE,是不会出现这个问题的。
---华软网友回复---
引用 16 楼 alexmayer 的回复:
难道是PPC的问题?我用WinCE,是不会出现这个问题的。


不是,我把系统的任务栏给隐藏了,显示自己做的一个简单的任务栏(对话框)。这样到时候用户就不能点“起头”按钮做其余操作了。所以一全屏就把自己任务栏给笼罩了。
---华软网友回复---
不知道怎么能让任务栏对话框一直在下面显示,难道先全屏再用::SetWindowPos把任务栏显示出来
---华软网友回复---
引用 17 楼 xjcwzp 的回复:
引用 16 楼 alexmayer 的回复:

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


不是,我把系统的任务栏给隐藏了,显示自己做的一个简单的任务栏(对话框)。这样到时候用户就不能点“起头”按钮做其余操作了。所以一全屏就把自己任务栏给笼罩了。

你的任务栏的父窗口是哪一个?
---华软网友回复---
最起头显示的那个登陆窗口,一直都在,没有关闭
---华软网友回复---
其余窗口显示的时候就规则了巨细,而且没有题目栏,就没什么问题。
---华软网友回复---
要是能像系统的任务栏那样就好了,其余窗口全屏的时候不影响它
---华软网友回复---
看看你们怎么回答
---华软网友回复---
我没有模拟器,预计你隐藏了系统任务栏,调用全屏时系统API不会减去系统任务栏的高度,自己MoveWindow,计算长宽高。
---华软网友回复---
PPC新建窗口是默许全屏吧,你改变这个默许行为,然后自己改变窗口巨细。
---华软网友回复---
引用 24 楼 alexmayer 的回复:
我没有模拟器,预计你隐藏了系统任务栏,调用全屏时系统API不会减去系统任务栏的高度,自己MoveWindow,计算长宽高。

我目前就是窗口显示的时候,给了它位置和巨细。唯一的欠好就是鼠标拖动题目栏能移动窗口。看来只可像你说的那样改成无题目窗口,自己再画个题目栏
---华软网友回复---
你仔细看下MSDN中的ModifyStyleEx。

应该是能够的,我没法尝试。

关头是这个
nFlags
Flags to be passed to SetWindowPos, or zero if SetWindowPos should not be called. The default is zero. See the Remarks section for a list of preset flags.

你试试,我也想知道结果。
---华软网友回复---
在对话框的OnCreate中调用ModifyStyleEx
---华软网友回复---
能够了,我这样做,窗口既有题目栏,也不能移动
            ModifyStyleEx(0, WS_EX_NODRAG,0);
          ::SetWindowPos(this->m_hWnd,HWND_TOPMOST,0,0,240,293,SWP_SHOWWINDOW);
---华软网友回复---
嗯,重新定位窗口的位置。
---华软网友回复---
谢谢小豹,非常谢谢。这问题已经纠结了我很长时间了。差点就去画工具栏了
---华软网友回复---
首先要用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);
  }
}

我试过,这样就能够,如果还不行,请回复我,我在帮你试试      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。