单文档初始最大化显示&&鼠标双击时窗口最大化失效

来源:互联网 发布:中国核事故知乎 编辑:程序博客网 时间:2024/05/17 20:12

一、在基于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 cscs.style |= WS_MAXIMIZE;//...
这种方法看上去是将窗口最大化显示了,设置的窗口的样式,但是运行程序后,窗口依然没有变化。

3、该方法就能解决上述提出的问题

// Parse command line for standard shell commands, DDE, file openCCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);//添加最大化显示语句m_nCmdShow = SW_SHOWMAXIMIZED; // Dispatch commands specified on the command lineif (!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 classif(pMsg->message == WM_NCLBUTTONDBLCLK){return 1;}return CWinApp::PreTranslateMessage(pMsg);}
4、实现窗口最大化显示