当前位置:文档之家› 单文档程序窗口最大化问题汇总

单文档程序窗口最大化问题汇总

初始化为最大化方法:
1. 在app的InitInstance中,if(!ProcessShellCommand(cmdInfo))之前,ParseCommandLine(cmdInfo)之后,加一句m_nCmdShow=SW_MAXIMIZE;
2. 在CMainFrame的PreCreateWindow中;指定cs.cx=GetSystemMetrics(SM_CXSCREEN); cs.cy=GetSystemMetrics(SM_CYSCREEN);
3. 在app的InitInstance()中把m_pMainWnd->ShowWindow(SW_SHOW); 改为m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
推荐第一和第二个方法,第三个方法能实现,但显示的时候能看出有个从初始页面到最大化的转过过程,不美观。

初始化大小随意设定:
在CMainFrame的PreCreateWindow中;指定cs.cx和cs.cy的大小,即可改变初始页面的大小。

vc2010中CFormView启动最大化窗口问题
在2010中,窗口都有记录上次位置、大小的功能,但在使用CFormView中如果启动时最大化,他并不会最大化,而是先最大化,然后又变成我们画的CFormView一样大了。

这倒无所谓,关键的毛病在于那个窗口样式不对了,窗口边缘没了。

解决方法如下:
其实这个CFormView中的OnInitUpdate函数问题,子类继承了这个函数,其中写了以下3句话:
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
这3句话目的在于使得自己适应当前框架。

这可能是个bug,如果去掉最后2行的代码,发现CFormView显示不正常。

其中有一个控件是不能正常显示的。

也是运气的成分,我发现如果将这3行代码都注释掉的话,界面就ok了。

任何情况下都显示正常。

另外一种办法
2010编译的程序默认有保持上次状态的功能,如果想取消,你可以在ExitInstance()中加入CleanState();即可,但是问题在于清除所有的状态了。

相关主题