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

一、在基于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、实现窗口最大化显示






你可能感兴趣的:(shell,command,File,文档,mfc)