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);
}
方法一:
在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)
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); 不起作用。
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 //最大化
m_nCmdShow=SW_SHOWMAXMIZED //最大化
也能实现。
补充:
补充:
1 如果想让一幅图画打开后,子框架窗口大小和图像大小一样。如果只在openfile里写上子框架
->setwindowpos或者movwindow等程序,那么当把子框架最大化以后,再打开一幅图像,会发现虽然子框架客户区的边框和图像大小一致,但是,子框架是在最大化状态下的,程序画面会有点奇怪。所以解决方法是,在setwindowpos之前加上一句子框架->ShowWindow(SW_NORMAL),先让框架处在normal状态下。
2在normal状态下,如果把窗口大小拖动发生变化,那么最大化后,再还原,就还原成拖动后的大小,也就是normal状态下的窗口大小可以发生变化。最大化和最小化都不会。比如上面说的,在最大化时打开图像,窗口大小变化了,最小化或者还原下,再点击最大化,窗口显示是最大化时的尺寸而不会是那副图片的大小。
3 调整子框架的大小,就会调整view的大小,使view窗口自动布满子框架大小好像。因为在程序里先调整view的大小,再调整子框架大小,(让子框架大一些),发现没用,view还是布满整个子框架;
如果先调整子框架大小,再调整view大小,就会发现,子框架里只有一部分被view覆盖。