如何禁用MFC对话框窗口的最小化按钮

qingdujun
博客专家认证
2013-11-07 03:05:51
我写了一个简单的抽奖软件,是基于MFC对话框编写的,显示是最大化的。。
我想禁用对话框窗口的最小化按钮,(也可以把最小化,最大化按钮都禁用了)。
我自己弄了好久也搞不定,我重载了虚函数PreCreateWindow()可是对外观改变没效果。

然后我看了这个文章:http://news.dayoo.com/tech/201005/21/10000617_102078468.htm
才知道PreCreateWindow()在对话框中不能修改窗口外观。

求大牛教一下 如何禁用对话框的最小化按钮啊。

下面这是我写的 没用的代码。

BOOL CLotteryDlg::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此添加专用代码和/或调用基类
BOOL bRe = CDialogEx::PreCreateWindow(cs);

cs.style &= ~WS_MINIMIZEBOX;//禁用最小化按钮
cs.style &= ~WS_MAXIMIZEBOX; //禁止窗口最大化
return bRe;
}
...全文
401 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dllg1988 2013-11-07
响应WM_NCLBUTTONDBLCLK,去掉基类的调用,双击标题栏就不会最小化最大化了
  • 打赏
  • 举报
回复
qingdujun 2013-11-07
引用 8 楼 liuzi_40 的回复:
用ModifyStyle修改风格就行了
引用 8 楼 liuzi_40 的回复:
用ModifyStyle修改风格就行了
嗯,ModifyStyle确实可以达到去掉按钮的效果,我开始试了一下,但是还是上面那个实现不了。
ModifyStyle(WS_THICKFRAME | WS_CAPTION, 0);
  • 打赏
  • 举报
回复
qingdujun 2013-11-07
引用 7 楼 liuzi_40 的回复:
[quote=引用 5 楼 u012339743 的回复:] [quote=引用 2 楼 liuzi_40 的回复:]
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 
{ 
cs.style = cs.style&~WS_MAXIMIZEBOX&~WS_SYSMENU&~WS_MINIMIZEBOX; 
if( !CFrameWnd::PreCreateWindow(cs) ) 
return FALSE; 
// TODO: Modify the Window class or styles here by modifying 
// the CREATESTRUCT cs 

return TRUE; 
}  
这是文档的,不是对话框的。。。对话框是不可以的。[/quote]对话框也是可以的 最好是用代码设置风格 不然动态创建的怎么改[/quote] 一般的窗口的创建是使用Create函数,这个函数在创建窗口之前调用了PreCreateWindow函数,并且允许在创建创建之前在PreCreateWindow注册一个拥有自定义窗口样式的新的窗口类,来创建一个拥有自定义类名新的窗口。而模式对话框是通过CreateDialogIndirect来创建的,在这当中并没有调用PreCreateWindow函数,重载的PreCreateWindow函数根本就不被执行,因此在这个函数里修改对话框的窗口类是没有用的。 CDialog是通过CDialog::DoModal函数创建窗口的,下面是MFC中DoModal函数的代码: 复制粘贴于:http://news.dayoo.com/tech/201005/21/10000617_102078468.htm (原文地址)。
  • 打赏
  • 举报
回复
泥鳅不是鱼 2013-11-07
用ModifyStyle修改风格就行了
  • 打赏
  • 举报
回复
泥鳅不是鱼 2013-11-07
引用 5 楼 u012339743 的回复:
[quote=引用 2 楼 liuzi_40 的回复:]
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 
{ 
cs.style = cs.style&~WS_MAXIMIZEBOX&~WS_SYSMENU&~WS_MINIMIZEBOX; 
if( !CFrameWnd::PreCreateWindow(cs) ) 
return FALSE; 
// TODO: Modify the Window class or styles here by modifying 
// the CREATESTRUCT cs 

return TRUE; 
}  
这是文档的,不是对话框的。。。对话框是不可以的。[/quote]对话框也是可以的 最好是用代码设置风格 不然动态创建的怎么改
  • 打赏
  • 举报
回复
qingdujun 2013-11-07
引用 4 楼 liuzi_40 的回复:
在资源属性中将Minimize Box 改成FALSE
嗯,谢谢。 这个解决了,现在就是 双击最上层(标题栏) 就会变成小窗体。 怎么才能让它不响应呢。
  • 打赏
  • 举报
回复
qingdujun 2013-11-07
引用 2 楼 liuzi_40 的回复:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 
{ 
cs.style = cs.style&~WS_MAXIMIZEBOX&~WS_SYSMENU&~WS_MINIMIZEBOX; 
if( !CFrameWnd::PreCreateWindow(cs) ) 
return FALSE; 
// TODO: Modify the Window class or styles here by modifying 
// the CREATESTRUCT cs 

return TRUE; 
}  
这是文档的,不是对话框的。。。对话框是不可以的。
  • 打赏
  • 举报
回复
泥鳅不是鱼 2013-11-07
在资源属性中将Minimize Box 改成FALSE
  • 打赏
  • 举报
回复
qingdujun 2013-11-07
引用 1 楼 980333 的回复:
窗口设计器中直接编译窗口属性中改


谢谢啊,我看到了。


这样是没有了最大化框 可是我双击软件最上面的时候(标题栏) 就会变成小窗口,这要怎么解决?
  • 打赏
  • 举报
回复
泥鳅不是鱼 2013-11-07
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 
{ 
cs.style = cs.style&~WS_MAXIMIZEBOX&~WS_SYSMENU&~WS_MINIMIZEBOX; 
if( !CFrameWnd::PreCreateWindow(cs) ) 
return FALSE; 
// TODO: Modify the Window class or styles here by modifying 
// the CREATESTRUCT cs 

return TRUE; 
}  
  • 打赏
  • 举报
回复
_菜菜 2013-11-07
窗口设计器中直接编译窗口属性中改
  • 打赏
  • 举报
回复
发帖
界面

1.5w+

社区成员

VC/MFC 界面
社区管理员
  • 界面
加入社区
帖子事件
创建了帖子
2013-11-07 03:05
社区公告
暂无公告