在CMainFrame的PreCreateWindow()中,写cx=500;为什么不能修改主框架属性?

2025-05-09 16:15:58
推荐回答(3个)
回答(1):

1,在你新建工程时,向导里面有很多选项,有一项是“MFC标准”的复选框,如果选择它,就可以实现在如图代码中改变窗口大小了。
2,如果不选择“MFC标准”的复选框,请看,如图f( !CFrameWndEx::PreCreateWindow(cs) )这个代码。VC6中(以及2012中MFC标准下)CMainFrame类派生于CFrameWnd,而2012中CMainFrame默认派生于CFrameWndEx。改变窗体大小最好不要在CFrameWndEx::PreCreateWindow()中进行了,为什么CFrameWndEx类就不能改变窗体大小呢?
其实并不是不能改变窗口大小,而是基于CFrameWndEx类派生的应用程序在下次打开时会记住上次关闭前的窗口状态并以上次关闭前窗口的大小和位置出现,而窗口的大小和位置刚好保存在注册表中。
希望能帮到你!!

回答(2):

因为程序在注册表里保留了FRAME上次的状态,包括大小位置以及各工具类窗口的布局等.
解决方法:
在App类的InitInstance中调用CleanState(_T("WorkSpace"))清除上次保存;
或者在App类的InitInstance中ShowWindow();UpdateWindow()之前修改窗口大小,例如 m_pMainWnd->MoveWindow(CRect(100, 100, 600, 400), FALSE);

回答(3):

因为不是一个地方 不是一种方法可以改变窗口的大小
PreCreateWindow只是在Create前调用了一下,PreCreateWindow设置了,但可能真正在Create时又把大小改为其他值了。
另外在程序任何地方调用SetWindowPos也能改变大小;
所以你检查程序其他地方是否也设置了窗体大小!