一、在基于MFC单文档做开发的时候,有时需要将单文档以最大化的方式显示,在网上查了资料,自己动手也实现了,以下将通过文字和代码进行描述:
1、一般方法在CXXApp::InitInstance()中,按照如下方式进行修改:
// The one and only window has been initialized, so show and update it. m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);//将SW_SHOW->SW_SHOWMAXIMIZED:将窗口最大化显示 m_pMainWnd->UpdateWindow();这种方式虽然可以实现将窗口最大化显示,但是 但效果是显示的时候窗口从普通大小"闪"到最大化,中间有一个渐变的过程,我们不希望有这样的一个效果;
2、或者在 CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中,添加:
// the CREATESTRUCT cs cs.style |= WS_MAXIMIZE; //...这种方法看上去是将窗口最大化显示了,设置的窗口的样式,但是运行程序后,窗口依然没有变化。
3、该方法就能解决上述提出的问题
// Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); //添加最大化显示语句 m_nCmdShow = SW_SHOWMAXIMIZED; // Dispatch commands specified on the command line if (!ProcessShellCommand(cmdInfo)) return FALSE; // The one and only window has been initialized, so show and update it. m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);//将SW_SHOW->SW_SHOWMAXIMIZED:将窗口最大化显示 m_pMainWnd->UpdateWindow();
二、初始最大化显示后,如何保持最大化的状态。
1、首先需要将窗口右上角最大化失效;
2、然后禁用当鼠标双击时窗口最大化功能;
3、代码实现:
在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中设置窗口显示样式:
//禁止窗口最大化 cs.style &= ~WS_MAXIMIZEBOX; //使窗口不能用鼠标改变大小 cs.style &= ~WS_THICKFRAME;在CXXApp类中重载:PreTranslateMessage(MSG* pMsg)
BOOL CVIEW3App::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message == WM_NCLBUTTONDBLCLK) { return 1; } return CWinApp::PreTranslateMessage(pMsg); }4、实现窗口最大化显示