在写程序时,如果包含了标题栏,但是没有包含最大化按钮或者最小话按钮。
那么人工用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来替换的话,如果工作区发生改变,窗口依然会覆盖其他部件(比如,任务栏由下面挪到侧边或是最上方,这是工作区都发生了改变,而窗口位置不变,就会遮盖住任务栏,或是显示不完全)。
(二)