参考上一条:https://mp.youkuaiyun.com/console/editor/html/106217002
直奔主题:有时候我们在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)修改如下代码发现不起作用
方法1:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CMDIFrameWndEx::PreCreateWindow(cs) )
return FALSE;
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
cs.cx = 300;
cs.cy = 300;
cs.lpszClass = AfxRegisterWndClass(0);
return TRUE;
}
但是实际在运行时无法改变框架的尺寸,网友给出了一下的原因和解决方案:
这里汲取博客https://www.cnblogs.com/liujinyao/p/4192388.html经验
因为VS2010会将一些信息写入注册表,这个和之前VS2005,VS2008(SP1除外)不太一样,默认的SDI和MDI是带的BCG的一些东西。
你要修改窗口大小,可以直接在App类的InitInstance中ShowWindow();UpdateWindow()之前修改窗口大小,例如 m_pMainWnd->MoveWindow(CRect(100, 100, 600, 400), FALSE);
我采用的方法是先在App类的初始化实例时调用CleanState(),清除注册表的状态信息,然后在框架类中设置窗口大小和样式,具体代码如下:
int CImageQuality02App::ExitInstance()
{
// TODO: 在此添加专用代码和/或调用基类
AfxOleTerm(FALSE);
CleanState();//清除程序在注册表写入的状态信息
return CWinAppEx::ExitInstance();
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWndEx::PreCreateWindow(cs) )
return FALSE;
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
cs.cx = 1200;
cs.cy = 600;
cs.lpszClass = AfxRegisterWndClass(0);
return TRUE;
}
方法2:
或者在窗口显示刷新之前设置窗口大小,这种方法也适用Dlg窗口,以下两种方法都是可以的
// 唯一的一个窗口已初始化,因此显示它并对其进行更新
m_pMainWnd->MoveWindow(CRect(0, 0, 600, 800), FALSE);
或者
m_pMainWnd->SetWindowPos(NULL, 0, 0, 950, 680, SWP_NOMOVE);
显示更新
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();