zoukankan      html  css  js  c++  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

  • 相关阅读:
    yum只下载不安装
    知乎的 Flink 数据集成平台建设实践
    饿了么EMonitor演进史
    手机淘宝轻店业务 Serverless 研发模式升级实践
    独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless
    一文详解物化视图改写
    业务团队如何统一架构设计风格?
    Fluid 给数据弹性一双隐形的翅膀 -- 自定义弹性伸缩
    开源 1 年半 star 破 1.2 万的 Dapr 是如何在阿里落地的?
    Service Mesh 从“趋势”走向“无聊”
  • 原文地址:https://www.cnblogs.com/liujinyao/p/4192388.html
Copyright © 2011-2022 走看看