改变窗口最大化的尺寸

背景:单文档程序,由于数据使用的是非模态对话框(不要问我为什么没有使用view),然后希望给数据展示对话框加一个最大最小化按钮,希望最大化的时候能适应view视图的大小,这样看起来比较合理。问题来了:如果对话框使用child风格,将其父窗口设为view即可实现最大化时想要的尺寸,但是我的数据展示窗口会不只一个,它们会叠加,发现在child风格下对话框被同级对话框盖住后怎么也无法激活到最前页来,这显然不符合要求。于是上网查,说是可以通过控制z-order来实现窗口最前显示,但水平所限,没有尝试成功。。。

于是打算截获数据对话框的最大化按钮的消息,这个简单,在WM_SYSCOMMAND消息响应中检查nID是否为SC_MAXIMIZE即可,然后获取view的位置和尺寸,使用MoveWindow将对话框的尺寸设为view的尺寸,即可做到最大化尺寸跟着view走,看起来很棒!

然额,最大化后的最大化按钮还是最大化按钮,不是应该出现的还原按钮?这一点也不奇怪,毕竟最大化的处理不是真的“最大化”的操作,而只是自己调用了一次MoveWindow函数而已。

于是,不学无术的我又开始想别的烂招了:能不能在最大化操作后自己把最大化按钮改为还原按钮?这里参考里一篇文章:[转载]MFC 系统自带菜单中的最大化、最小化和关闭按钮于是尝试以下代码:

void CDlgXXX::OnSysCommand(UINT nID, LPARAM lParam)

{

//TODO:在此添加消息处理程序代码和/或调用默认值

if(nID == SC_MAXIMIZE)

{

CMenu* menu = GetSystemMenu(0);

menu->DeleteMenu( SC_MAXMIZE,MF_BYCOMMAND);//删除最大化菜单项,最后只是删掉了右键菜单项,按钮还在只是没反应了

menu->AppendMenu(SC_RESTORE, MF_BYCOMMAND);//添加还原菜单项,右键菜单里添加成功,但没有成功

//也试过以下几个函数,都没实现,可能是我不会用

RemoveMenu(...);

EnableMenu(...);

}

}

后来偶然发现一篇文章:http://blog.csdn.net/u012578046/article/details/45418679,,才知道可以换个思路,设置最大化和最小化的尺寸,在消息WM_GETMAXMININFO的响应中添加如下代码,这里直接照搬:

  1. void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值