高手请问,如何去掉子窗口标题栏上的最大化和最小化按钮,但保留关闭按钮?

ljunfa 2005-05-30 11:14:49
多文档界面,子窗口可以通过设置precreatewindow函数设置窗口属性,从而去掉标题栏上的最大化和最小化按钮,但保留关闭按钮。但一旦将子窗口最大化后,其最大化和最小化按钮又出现了,(最大化按钮变成了restore按钮),虽然是灰的,但很难看,能否将其去掉!
...全文
1035 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
xialin168 2005-06-06
  • 打赏
  • 举报
回复
不可以用标题栏的颜色绘图履盖掉那两个按钮吗?
可以另辟蹊径想想别的办法,能解决问题才是好方法,
为什么就非得往死胡同里钻呢!
cooljjyy 2005-06-05
  • 打赏
  • 举报
回复
通过枚举所有子窗体,可以找到系统标题栏的局柄,然后通过Hook接管该控件的消息,自己处理重绘不要把最大化按钮画出来就可以了。一些换肤软件就是这样做的,这样甚至可以换其他已经编译好的软件的皮肤。这里有一个类似的例子你可以参考:
http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=1273
ljunfa 2005-06-05
  • 打赏
  • 举报
回复
vcmute(横秋),你说的方法很有效。但是我是多文档,当弹出其它子窗口时,其最大化,最小化按钮也被去掉了,但其它子窗口的按钮我是需要的,如何解决这个问题?

To xjtt2000(沧海一笑),你的方法试验过没有,我试了,但不行啊!
xjtt2000 2005-06-03
  • 打赏
  • 举报
回复
简单,你只要在
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style &= ~(LONG) FWS_ADDTOTITLE;
cs.style &=~WS_MINIMIZEBOX;
cs.style &=~WS_MAXIMIZEBOX;
if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;
return TRUE;
}
xjtuzhw 2005-06-03
  • 打赏
  • 举报
回复
把该非客户区做成透明的,或者利用一个dll在固定区域显示控件难道不可以吗
camelyi(C++打字员) ,不是所有程序都要用已有的框架来做吧
camelyi 2005-06-03
  • 打赏
  • 举报
回复
回复人: xjtuzhw(飞影-->飞到哪里是终点?) ( ) 信誉:99 2005-06-03 09:45:00 得分: 0


把最大化,最小化的位置做个控件覆盖掉


哈哈,啥控件可以创建到窗口的非客户区上去?????
xjtuzhw 2005-06-03
  • 打赏
  • 举报
回复
把最大化,最小化的位置做个控件覆盖掉
vcmute 2005-06-02
  • 打赏
  • 举报
回复
第一遍closebox还没有出来,只是mainframe的原窗口
我是搁在CChildFrame的OnSize中,并判断type是否为最大化(也会触发两次,一次是Visable)
ljunfa 2005-06-02
  • 打赏
  • 举报
回复
vcmute(横秋),看来你是这方面的高手,我这里不知何故,删第一遍还不行,要删第二遍!
casinosun 2005-06-01
  • 打赏
  • 举报
回复
use dialog
younggle 2005-06-01
  • 打赏
  • 举报
回复
窗口最大化以后,在重新设置一下窗口的属性。就像在 precreatewindow函数设置窗口属性一样,就可以了。
lsvine 2005-06-01
  • 打赏
  • 举报
回复
gz
vcmute 2005-06-01
  • 打赏
  • 举报
回复
因为SC_MINIMIZE是右对齐的,所以要给SC_CLOSE设置MFT_RIGHTJUSTIFY

CMenu* m = ((CMainFrame*)AfxGetMainWnd())->GetMenu();
if(m)
{
UINT n=m->GetMenuItemCount();
MENUITEMINFO s={0};
s.cbSize=sizeof(MENUITEMINFO);
s.fMask=MIIM_TYPE|MIIM_ID;
m->GetMenuItemInfo(n-1,&s,TRUE);
if(s.wID == SC_CLOSE)
{
s.fType|=MFT_RIGHTJUSTIFY;
SetMenuItemInfo(m->GetSafeHmenu(),n-1,TRUE,&s);
}

m->DeleteMenu (SC_RESTORE,MF_BYCOMMAND);
m->DeleteMenu (SC_MINIMIZE,MF_BYCOMMAND);
}

P.S.有点奇怪,为什么SetMenuItemInfo不属于CMenu类的成员函数,且不用BYPOS不行
vcmute 2005-06-01
  • 打赏
  • 举报
回复
去掉restore按钮用
AfxGetMainWnd()->GetMenu()->DeleteMenu (SC_RESTORE,MF_BYCOMMAND);
zengwujun 2005-05-31
  • 打赏
  • 举报
回复
不要发最大化的消息,直接让窗口的尺寸变化
ShiGang 2005-05-31
  • 打赏
  • 举报
回复
MDI子窗口好像不能設置為固定窗口,但可以通過GetSytemMenu,GetSubMenu,GetMenuItem和EnableMenu來將系統菜單的"最大化"和"最小化"給Disible掉.
ljunfa 2005-05-31
  • 打赏
  • 举报
回复
还有窗体高手吗?
我的程序一定要最大化的。如果重画窗体,如何可以截获重绘消息,使得系统不要再画按钮?(不要大小化,恢复按钮,但要关闭按钮)
ljunfa 2005-05-31
  • 打赏
  • 举报
回复
呼唤高手,难道这个问题真的没解吗?
xift_2008 2005-05-31
  • 打赏
  • 举报
回复
重画窗体还不如不让它最大化
fvan 2005-05-31
  • 打赏
  • 举报
回复
无法去掉最大化,最小化按钮,只能变灰。除非你自己重画窗体
加载更多回复(6)
TMenuItem显示在右侧 不使用MDI制作窗体 不使用标题栏移动窗体 不使用标题栏移动窗口 两行hint 从XML文件动态创建菜单 从另外MDI窗口读数据 使控件具有阴影效果 使每个MDIChild填充整个主窗口区域 使用Enter键替代Tab键 使用动画效果关闭窗口 使用动画方式打开窗体 使用帮助文件 使用状态栏显示hint 使用系统图标 使窗体不能移动 关闭一个MDI窗体 创建一个能改变大小的无边界窗体 创建半透明窗体 创建圆角窗体 创建透明窗体 判断窗体是modal 制作动画应用程序图标 制作可移动不能改变大小的窗体 制作永远最小化窗口 制作透明窗口 取和设置鼠标位置 取鼠标指针下面的活动TWinControl 启动时隐藏主窗口 在 window xp 使用阴影效果 在TCombobox内显示多行文本 在TScrollBox上显示窗体 在你的程序中使用 Win XP 可视风格 在窗体上制造多边形洞 在窗体上挖洞 在窗体周围画彩色轮廓 定位messagebox 实现窗口最小化动画效果 将InputQuery定位在窗体居中位置 怪异窗体 手动改变窗体比例 抓屏 拖拽时显示窗口内容 捕获主窗体WM_MOVE消息 改变Hint字体 改变Hint的显示时间 改变MessageDlg的按钮标题 最小化控件 最小化第二个窗口到任务栏 查找窗体注册类 格式化MessageDlg 检查PopUp菜单是否打开 检查控件是否被其它窗口遮掩 添加菜单项到系统菜单 渐变色填充窗体 特效窗口 移动指针到当前具有焦点的控件 移除系统菜单项 自动关闭TCommonDialog 运行时改变MainForm 运行时移动控件 运行时移动窗口控件 选中或取消其它窗口的复选框 通过在标题栏上右击缩小窗口 防止 Windows 最小化窗体 防止控件重画 防止窗体改变大小和移动 隐藏标题栏 隐藏窗体的最大化最小化按钮
第1章 窗体与界面设计   1.1 菜单应用实例    实例001 在系统菜单中添加菜单项    实例002 带图标的程序菜单    实例003 根据表中数据动态生成菜单    实例004 浮动的菜单   1.2 弹出菜单应用实例    实例005 在控件上单击右键弹出菜单    实例006 个性化的弹出菜单    实例007 任务栏托盘弹出菜单   1.3 工具栏应用实例    实例008 带背景的工具栏    实例009 带图标的工具栏    实例010 带下拉菜单的工具栏    实例011 可调整按钮位置的工具栏    实例012 XP风格工具栏    实例013 动态设置是否显示工具栏按钮文本    实例014 具有提示功能的工具栏   1.4 状态栏应用实例    实例015 带进度条的状态栏    实例016 动画效果的状态栏    实例017 滚动字幕的状态栏   1.5 导航界面应用实例    实例018 Outlook导航界面    实例019 树状导航界面    实例020 按钮导航界面    实例021 图片导航界面   1.6 界面窗体应用实例    实例022 使用位图设计畸形界面    实例023 椭圆形的程序界面    实例024 自绘窗体界面    实例025 以时钟显示界面    实例026 窗体融合技术    实例027 限制对话框最大时的窗口大小    实例028 分割视图窗口    实例029 对话框全屏显示   1.7 多媒体宣传光盘应用实例    实例030 多媒体宣传光盘主界面    实例031 自动运行的多媒体宣传光盘   1.8 多媒体触摸屏程序应用实例    实例032 采购中心多媒体触摸屏程序    实例033 为触摸屏程序添加虚拟键盘   1.9 窗体位置应用实例    实例034 不可移动的窗体    实例035 始终在最上面的窗体    实例036 以动画形式显示窗体    实例037 磁性窗体   1.10 窗体标题栏应用实例    实例038 闪烁的窗体标题栏    实例039 拖动没有标题栏的窗体    实例040 禁用标题栏上的最大化最小化关闭按钮   1.11 窗体形状及应用    实例041 半透明窗体    实例042 创建字型窗体    实例043 设计桌面精灵   1.12 通用对话框的应用    实例044 打开位图预览对话框    实例045 打开Windows新型对话框    实例046 同时选择多个文件    实例047 文本替换对话框    实例048 字体选择对话框  第2章 控件应用   2.1 按钮控件典型实例    实例049 AVI动画按钮    实例050 GIF动画按钮    实例051 图文按钮    实例052 不规则按钮    实例053 热点按钮   2.2 编辑框控件典型实例    实例054 为编辑框设置新的系统菜单    实例055 为编辑框控件添加列表选择框    实例056 多彩边框的编辑框    实例057 改变编辑框文本颜色    实例058 不同文本颜色的编辑框    实例059 位图背景编辑框   2.3 静态文本控件典型实例    实例060 电计时器    实例061 使用静态文本控件设计群组框    实例062 制作超链接控件   2.4 列表框控件典型实例    实例063 利用列表框控件实现标签式数据选择    实例064 具有水平滚动条的列表框控件    实例065 列表项的提示条    实例066 位图背景列表框控件   2.5 组合框控件典型实例    实例067 将数据表中的字段添加到组合框控件    实例068 带查询功能的组合框控件    实例069 自动调整组合框的宽度    实例070 颜色组合框    实例071 多列显示的组合框    实例072 带图标的组合框    实例073 显示系统盘符组合框   2.6 列表视图控件典型实例    实例074 Windows资源管理器    实例075 利用列表视图控件浏览数据    实例076 利用列表视图控件制作导航界面    实例077 在列表视图中拖动视图项    实例078 具有排序功能的列表视图控件    实例079 具有文本录入功能的列表视图控件    实例080 使用列表视图设计登录界面   2.7 树视图控件典型实例    实例081 多级数据库树状结构数据显示    实例082 节点拖动功能的树控件    实例083 带复选功能的树状结构    实例084 三态效果树控件    实例085 修改树控件节点连线颜色    实例086 位图背景树控件    实例087 显示磁盘目录    实例088 树型提示

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧