WM_SIZE与窗口大小的调整

【问题】:

主窗口最大化、还原时,子窗口大小异常现象:

(1) 主窗口最大化时,左边子窗口大小不变,右边子窗口填充其他区域;

(2)主窗口还原时,左边子窗口大小变大,右边子窗口填充其他区域;

(3)拉伸主窗口时,子窗口跟着变化,大小正常。

总之:子窗口大小的变化比主窗口慢一拍,例如,主窗口要变大时,子窗口不变;主窗口要还原时,子窗口才变大。


【背景】:

SDI框架程序;

CSplitterWnd控件分隔左右两个视图;

主窗口和子窗口都响应了WM_SIZE消息。


【调试跟踪】:

窗口初始化时,主窗口和子窗口的OnSize函数都分别调用了两次。

窗口最大化时,主窗口OnSize()函数执行,子窗口未执行,造成子窗口大小没变化;

窗口还原时,先执行了子窗口的OnSize函数,但是OnSize函数的参数与想象中不一致:nType参数正确(SIZE_RESTORED), 宽和高的参数值不正常(最大化时子窗口应该达到的宽和高),子窗口大小变为最大化状态应该达到的大小;再执行了主窗口的OnSize函数,函数参数正确;


【解决】:

MainFrm的OnSize()函数中调用了CSplitterWnd控件的SetColumnInfo函数之后,增加MoveWindow函数,调整CSplitterWnd控件的位置。

结果正常!


【疑问】:

(1) 为什么子窗口OnSize参数不正常?

(2)为什么窗口最大化、还原按钮不正常,但是窗口拉伸正常?


期待牛人解惑!

你可能感兴趣的:(MFC)