MDI子框架一启动就最大化

转载 2011年01月20日 09:20:00

MDI子框架一启动就最大化[转载]

 
 
  方法一:  
  在CChildFrame::PreCreateWindow(CREATESTRUCT&   cs)函数中,加了  
  cs.style   |=   WS_VISIBLE|WS_MAXIMIZE;,可以实现了  
  方法二:  
  用ClassWizard为CChildFrame类添加ActiveFrame消息  
  void   CChildFrame::ActivateFrame(int   nCmdShow)    
  {   
       nCmdShow=SW_MAXIMIZE;
 CMDIChildWnd::ActivateFrame(nCmdShow);
}    
   
 方法三:
          在视类重载的OnInitUpdate成员函数中加上:    
          CMDIChildWnd   *pWnd=(CMDIChildWnd   *)GetParentFrame();    
          pWnd->MDIMaximize();//或者pWnd->ShowWindow(SW_MAXIMIZE)
 
 
主窗口最大化: 比较麻烦:
注意,
1如果和子框架一样,只在主框架的PreCreateWindow中写上cs.style   |=  WS_VISIBLE| WS_MAXIMIZE;会发现不起作用,
2在OnCreate()里写showwindow(SW_MAXIMIZE)是有问题的,会发现虽然启动后尺寸是最大化,但是右上角标记是最大化,也就是此时的状态是被标记成normal下的状态,也就是窗口的最大化和normal时的尺寸变成一样了。
3  PreCreateWindow中写上
    cs.cy = GetSystemMetrics(SM_CYSCREEN) ;
     cs.cx = GetSystemMetrics(SM_CXSCREEN) ;
会发现,首先启动时,画面的下面部分被桌面下面的任务栏挡住了,其次发现和2一样的问题,此时程序窗口的最大化最小化状态没问题,但normal状态下是显示启动时的特别大的画面尺寸。
4 在view类的OnInitialUpdate()里添加:
CMainFrame* pMainfrm=(CMainFrame *)AfxGetMainWnd();
    pMainfrm->ShowWindow(SW_MAXIMIZE);  不起作用。
 
其实问题出在imgpro2.cpp里的CImgpro2App::InitInstance()里
 倒数第2句:pMainFrame->ShowWindow(m_nCmdShow);
把这句话注释掉,依次用前几种方法看看:
1 依然不起作用
2程序启动时,主框架是最大化状态(右上角标记是还原标记),但是点击后,还原的尺寸还是最大化的尺寸。
3不显示画面
4 可以实现功能。初识最大化,点击还原标记,还原成中等大小的一个窗口。
 
或者 不把pMainFrame->ShowWindow(m_nCmdShow);注释掉
在   InitStance   函数中设定   m_nCmdShow的取值.  
          m_nCmdShow=SW_SHOWMAXMIZED   //最大化   
也能实现。
  补充:
1 如果想让一幅图画打开后,子框架窗口大小和图像大小一样。如果只在openfile里写上子框架
->setwindowpos或者movwindow等程序,那么当把子框架最大化以后,再打开一幅图像,会发现虽然子框架客户区的边框和图像大小一致,但是,子框架是在最大化状态下的,程序画面会有点奇怪。所以解决方法是,在setwindowpos之前加上一句子框架->ShowWindow(SW_NORMAL),先让框架处在normal状态下。
2在normal状态下,如果把窗口大小拖动发生变化,那么最大化后,再还原,就还原成拖动后的大小,也就是normal状态下的窗口大小可以发生变化。最大化和最小化都不会。比如上面说的,在最大化时打开图像,窗口大小变化了,最小化或者还原下,再点击最大化,窗口显示是最大化时的尺寸而不会是那副图片的大小。
3 调整子框架的大小,就会调整view的大小,使view窗口自动布满子框架大小好像。因为在程序里先调整view的大小,再调整子框架大小,(让子框架大一些),发现没用,view还是布满整个子框架;
如果先调整子框架大小,再调整view大小,就会发现,子框架里只有一部分被view覆盖。

MDI子框架一启动就最大化

MDI子框架一启动就最大化      方法一:      在CChildFrame::PreCreateWindow(CREATESTRUCT&   cs)函数中,加了      cs.styl...
  • mergerly
  • mergerly
  • 2013年03月27日 11:15
  • 814

使用Qt实现MDI风格的主窗体

文章来源:http://hi.baidu.com/wuyunju/item/3d20164c99a276f6dc0f6c52 QT提供了MDIArea控件可以很方便的实现标准的MDI窗体,但用起来并不...
  • libaineu2004
  • libaineu2004
  • 2014年02月21日 15:05
  • 2172

WPF实现类似MDI子窗体的功能

在我的上一篇博客中 http://blog.csdn.net/soft2buy/article/details/5479946,提到了用UserControl做为WPF的“MDI子窗体”。今天偶然发现...
  • soft2buy
  • soft2buy
  • 2013年11月12日 17:06
  • 10835

MFC中MDI方式下如何自由生成自定义的子窗口

本文介绍如何删除由MFC AppWinzard工程中产生的文档/视图结构,同时根据自己的实际需要创建子窗口界面。 Visual C++ 开发系统中应用程序向导的标准设置允许应用程序开发者方便简单...
  • dearm23
  • dearm23
  • 2015年10月28日 23:54
  • 1262

VC MFC SDI/MDI框架各部分指针获取方式

VC MFC SDI/MDI框架各部分指针获取方式 前人在CSDN总结的,曾经帮助过我,整理总结一下,希望也能帮助一下别人。      获得CWinA...
  • qq_23992597
  • qq_23992597
  • 2016年04月14日 10:04
  • 1097

C#之二十一 创建MDI应用程序和组件开发

MDI应用程序介绍 在VC#中,MDI应用程序由两部分组成,即MDI父窗体和MDI子窗体。 一个MDI应用程序可以包含一个或多个MDI父窗体,每个MDI父窗体又可以包含多个MDI子...
  • zhangchen124
  • zhangchen124
  • 2016年05月03日 10:33
  • 3097

C# Winform MDI窗体,父窗体控件覆盖子窗体的解决办法

问题:MDI窗体中,父窗体控件会覆盖子窗体,网上很多解决方案表面上解决了问题,但失去了MDI窗体的基本特性,并不实用。比较赞成使用子窗体“代替”父窗体控件的方案。思路:不将控件放置在父窗体上,而是放在...
  • lj22377
  • lj22377
  • 2015年09月14日 15:37
  • 2236

DELPHI中MDI子窗口的关闭 和打开

Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。解决办法是在子窗口的OnClose事件处理过程中加入如...
  • wozengcong
  • wozengcong
  • 2015年01月24日 23:26
  • 3494

在MFC的MDI程序中设置子窗口客户区大小

用MFC写一个基于OpenCV的MDI程序,每一次读取图像之后,图像都会显示在主程序的一个子窗口中。 问题来了:根据读取的图像大小采用MoveWindow函数来设置子窗口大小时,显示的窗口尺寸实际上是...
  • xfijun
  • xfijun
  • 2017年04月05日 23:03
  • 807

VB.NET章鱼哥出品—如何解决MDI子窗体被父窗体中的控件覆盖的问题

最近有个网友问我这个问题,我就上网搜了下,结果很失望,有几个在CSDN上发的求助帖,看到最后都没有找到明确的答案。这里笔者在网上找到了API函数SetParent(),并对网上的错误进行了修改,并给出...
  • zhangyubishoulin
  • zhangyubishoulin
  • 2014年11月06日 06:40
  • 2283
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MDI子框架一启动就最大化
举报原因:
原因补充:

(最多只允许输入30个字)