首页 > 代码库 > MFC中,通过preCreateWindow函数无法设置视图样式(包括窗口的大小)
MFC中,通过preCreateWindow函数无法设置视图样式(包括窗口的大小)
开发环境:vs2010
在开发基于单文档的MFC项目时,我需要在程序的初始化时,设置框架的大小,应在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中设定设置cs,包括框架窗口的样式以及大小等。
如下为将框架窗口设置为长宽为100和300时的代码:
1 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 2 { 3 if(!CFrameWnd::PreCreateWindow(cs)) 4 { 5 return FALSE; 6 } 7 8 cs.style &= ~WS_OVERLAPPED 9 cs.cy = 300;10 cs.cx = 100;11 12 return TRUE;13 }
但是实际在运行时无法改变框架的尺寸,网友给出了一下的原因和解决方案:
因为VS2010会将一些信息写入注册表,这个和之前VS2005,VS2008(SP1除外)不太一样,默认的SDI和MDI是带的BCG的一些东西。
你要修改窗口大小,可以直接在App类的InitInstance中ShowWindow();UpdateWindow()之前修改窗口大小,例如 m_pMainWnd->MoveWindow(CRect(100, 100, 600, 400), FALSE);
我采用的方法是先在App类的初始化实例时调用CleanState(),清除注册表的状态信息,然后在框架类中设置窗口大小和样式,具体代码如下:
1 int CImageQuality02App::ExitInstance()2 {3 // TODO: 在此添加专用代码和/或调用基类4 AfxOleTerm(FALSE);5 CleanState();//清除程序在注册表写入的状态信息6 7 return CWinAppEx::ExitInstance();8 }
1 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 2 { 3 if( !CFrameWndEx::PreCreateWindow(cs) ) 4 return FALSE; 5 // TODO: 在此处通过修改 6 // CREATESTRUCT cs 来修改窗口类或样式 7 cs.cx = 1200; 8 cs.cy = 600; 9 cs.lpszClass = AfxRegisterWndClass(0);10 11 return TRUE;12 }
引用来源:http://blog.sina.com.cn/s/blog_62f521600100ml2l.html
http://hyhvi.iteye.com/blog/1513942
MFC中,通过preCreateWindow函数无法设置视图样式(包括窗口的大小)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。