MFC学习笔记——如何使窗口最大化,但不遮盖任务栏

本文介绍了在MFC编程中遇到的窗口最大化遮盖任务栏和窗口最大化后仍可拖动的问题,提出了三种解决方法:1)通过响应WM_NCLBUTTONDOWN并检查IsZoomed防止最大化时拖动;2)重载WM_GETMINMAXINFO以调整窗口最大化位置;3)拦截WM_NCHITTEST消息避免用户改变窗口大小。同时,讨论了WM_SIZE、WM_SIZING、WM_GETMINMAXINFO消息处理及其在窗口尺寸控制中的作用。
摘要由CSDN通过智能技术生成

在写程序时,如果包含了标题栏,但是没有包含最大化按钮或者最小话按钮。

那么人工用ShowWindow(SW_MAXIMIZE),窗口会盖住任务栏,并且窗口最大化后还可以拖动!

1、窗口最大化可以拖动的问题就是在最大化时不让其拖动,

只要响应WM_NCLBUTTONDOWN时判断是否最大化 IsZoomed如果是则直接返回就OK!

2、解决遮住任务栏的问题。。

使用ShowWindow(SW_MAXIMIZE),使对话框最大化后,任务栏也被遮住了,如何去掉任务栏的遮盖?而且对话框窗口还处于激活状态。

(一)方法一

此时,应该没有设置WS_CAPTION属性,只能自己MoveWindow。

函数ShowWindow(SW_MAXIMIZE)应该是在OnInitDialog()中调用的。

ShowWindow(SW_MAXIMIZE)是覆盖任务栏的。
用下面代码代替之

 CRect rcWorkArea; 
 // 获取工作区的大小
 SystemParametersInfo(SPI_GETWORKAREA,0,&rcWorkArea,0); 
 MoveWindow(&rcWorkArea); 

下面介绍一下SystemParametersInfo()函数。

  • 函数原型:
    BOOL SystemParametersinfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni);

  • 参数:
    uiAction:该参数指定要查询或设置的系统级参数。
    SPI_GETWORKAREA:检索工作区大小。工作区是指没有被任务遮盖的屏幕部分。
    uiParam:uiParam 在参数说明中所有为ulParam均为错误。
    vParam:与查询或设置的系统参数有关。关于系统级参数的详情,请参考uiAction参数。否则在没有指明情况下,必须将该参数指定为NULL。
    fWinlni:如:如果设置系统参数,则它用来指定是否更新用户配置文件(Profile)。亦或是否要将WM_SETTINGCHANGE消息广播给所有顶层窗口,以通知它们新的变化内容。

注意:由于这里,ShowWindow(SW_MAXIMIZE)函数是在OnInitDialog()中调用的,按照这种方法,用MoveWindow来替换的话,如果工作区发生改变,窗口依然会覆盖其他部件(比如,任务栏由下面挪到侧边或是最上方,这是工作区都发生了改变,而窗口位置不变,就会遮盖住任务栏,或是显示不完全)。

(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值