vc如何让打开的子窗口默认是最大化的

MDI子窗口一启动就最大化   
  方法一:  
  在CChildFrame::PreCreateWindow(CREATESTRUCT&   cs)函数中,加了  
  cs.style   |=   WS_VISIBLE|WS_MAXIMIZE;,可以实现了  
  方法二:  
  用ClassWizard为CChildFrame类添加ActiveFrame消息  
  void   CChildFrame::ActivateFrame(int   nCmdShow)    
  {  
        if(GetMDIFrame()->MDIGetActive())    
                CMDIChildWnd::ActivateFrame(nCmdShow);    
          else   //   else   open   maximized.    
                  CMDIChildWnd::ActivateFrame(SW_SHOWMAXIMIZED);    
   
  }     
 
 
 
主窗口最大化:   
          在   InitStance   函数中设定   m_nCmdShow的取值.  
          m_nCmdShow=SW_SHOWMAXMIZED   //最大化  
  MDI窗口:  
          重载   MDI   Window   的PreCreateWindow函  
  数,设置WS_MAXIMIZE  
  文档一生成就最大化:  
          在视类重载的OnInitUpdate成员函数中加上:    
          CMDIChildWnd   *pWnd=(CMDIChildWnd   *)GetParentFrame();    
          pWnd->MDIMaximize();
 

 

使子框架窗口在创建时就最大化的正解:

 

有人说如下覆盖ActivateFrame虚函数就可以了:
BOOL PreCreateWindow(CREATESTRUCT& cs)
{
   cs |= WS_MAXIMIZE;
   return CMDIChildWnd::PreCreateWindow(cs);
}
经试验无效。

有人说覆盖ActivateFrame虚函数就可以了:
void CChildFrame::ActivateFrame(int nCmdShow)
{
   // Create the child frame window maximized
   nCmdShow = SW_MAXIMIZE;
  
   CMDIChildWnd::ActivateFrame(nCmdShow);
}
经试验有效,但效果不好,因为用户可以看到一个最大化的过程,如同用户手工按下最大化按钮的情形一样。

再试,再上网搜索,难道没有办法了么?

最后一招:
BOOL PreCreateWindow(CREATESTRUCT& cs)
{
   cs |= WS_MAXIMIZE|WS_VISIBLE;
   return CMDIChildWnd::PreCreateWindow(cs);
}
啊!这不就第一招么?再仔细看看吧。
经试验有效,而且没有第二招的缺点。

posted @   微笑的艾米  阅读(2040)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示