【问题】:
主窗口最大化、还原时,子窗口大小异常现象:
(1) 主窗口最大化时,左边子窗口大小不变,右边子窗口填充其他区域;
(2)主窗口还原时,左边子窗口大小变大,右边子窗口填充其他区域;
(3)拉伸主窗口时,子窗口跟着变化,大小正常。
总之:子窗口大小的变化比主窗口慢一拍,例如,主窗口要变大时,子窗口不变;主窗口要还原时,子窗口才变大。
【背景】:
SDI框架程序;
CSplitterWnd控件分隔左右两个视图;
主窗口和子窗口都响应了WM_SIZE消息。
【调试跟踪】:
窗口初始化时,主窗口和子窗口的OnSize函数都分别调用了两次。
窗口最大化时,主窗口OnSize()函数执行,子窗口未执行,造成子窗口大小没变化;
窗口还原时,先执行了子窗口的OnSize函数,但是OnSize函数的参数与想象中不一致:nType参数正确(SIZE_RESTORED), 宽和高的参数值不正常(最大化时子窗口应该达到的宽和高),子窗口大小变为最大化状态应该达到的大小;再执行了主窗口的OnSize函数,函数参数正确;
【解决】:
MainFrm的OnSize()函数中调用了CSplitterWnd控件的SetColumnInfo函数之后,增加MoveWindow函数,调整CSplitterWnd控件的位置。
结果正常!
【疑问】:
(1) 为什么子窗口OnSize参数不正常?
(2)为什么窗口最大化、还原按钮不正常,但是窗口拉伸正常?
期待牛人解惑!