现在的位置: 首页 > 综合 > 正文

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

2012年06月10日 ⁄ 综合 ⁄ 共 1320字 ⁄ 字号 评论关闭

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);
}
啊!这不就第一招么?再仔细看看吧。
经试验有效,而且没有第二招的缺点。

抱歉!评论已关闭.