【MFC】doc_view结构中让窗口一开始就最大化探讨

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

doc_view结构中让窗口一开始就最大化探讨

作者:enoloo

一般的做法是在 C**App::InitInstance()中,修改成这样:

{

//...

m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);

m_pMainWnd->UpdateWindow();

//...

}

或者,还在 CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中,添加:

{

//...

cs.style |= WS_MAXIMIZE;

//...

}

这种做法能产生窗口最大化,但效果是显示的时候窗口从普通大小"闪"到最大化。还有的做法,是先将窗口隐藏,然后再最大化。那么怎样使窗口正常一开始出现就最大化?看看下面的流程,从 C**App::InitInstance()中的ProcessShellCommand(...)开始:

{

//...

//ProcessShellCommand中第一次显示了窗口

if (!ProcessShellCommand(cmdInfo))

return FALSE;

m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);

m_pMainWnd->UpdateWindow();

//...

}

->CWinApp::ProcessShellCommand

->AfxGetApp()->OnCmdMsg(ID_FILE_NEW, 0, NULL, NULL)

//如果你自己处理了ID_FILE_NEW要调用CWinApp::OnFileNew()

->CWinApp::OnFileNew()

->CDocManager::OnFileNew()

->CSingleDocTemplate::OpenDocumentFile //当前文档模板初始化

->CSingleDocTemplate::CreateNewDocument //创建文档

//加载资源并创建主窗口(顺便创建视图),但没显示

->CSingleDocTemplate::CreateNewFrame

->CFrameWnd::InitialUpdateFrame

{

//...

int nCmdShow = -1; // default

CWinApp* pApp = AfxGetApp();

if (pApp != NULL && pApp->m_pMainWnd == this)

{

nCmdShow = pApp->m_nCmdShow; // use the parameter from WinMain

pApp->m_nCmdShow = -1; // set to default after first time

}

ActivateFrame(nCmdShow); //在这里第一次显示窗口

//...

}

->CFrameWnd::ActivateFrame(int nCmdShow)

// nCmdShow is the normal show mode this frame should be in

{

// translate default nCmdShow (-1)

if (nCmdShow == -1)

{

if (!IsWindowVisible())

nCmdShow = SW_SHOWNORMAL;

else if (IsIconic())

nCmdShow = SW_RESTORE;

}

// bring to top before showing

BringToTop(nCmdShow);

if (nCmdShow != -1)

{

// show the window as specified

ShowWindow(nCmdShow); //第一次显示窗口

// and finally, bring to top after showing

BringToTop(nCmdShow);

}

}

->***

从上面可以看出,CWinApp::ProcessShellCommand函数创建了窗口并显示,这是窗口第一次显示,先于:

m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);

m_pMainWnd->UpdateWindow();

怎么解决问题? 然窗口第一次显示就最大化?

CCommandLineInfo cmdInfo;

ParseCommandLine(cmdInfo);

// Dispatch commands specified on the command line

//在ParseCommandLine之后,ProcessShellCommand之前,添加这句!!!

m_nCmdShow = SW_SHOWMAXIMIZED;

if (!ProcessShellCommand(cmdInfo))

return FALSE;

// The one and only window has been initialized, so show and update it.

m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);

m_pMainWnd->UpdateWindow();

问题解决。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航