• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
_Java小菜盘
博客园    首页    新随笔    联系   管理    订阅  订阅
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 }    
View Code

  但是实际在运行时无法改变框架的尺寸,网友给出了一下的原因和解决方案:

  因为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 }
View Code
 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 }
View Code

 

引用来源:http://blog.sina.com.cn/s/blog_62f521600100ml2l.html 

       http://hyhvi.iteye.com/blog/1513942

posted on 2014-12-29 20:51  _Java小菜盘  阅读(2780)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3