您的位置:首页 > 其它

MFC窗口启动最大化

2013-10-21 11:08 239 查看
常用MFC进行编程的人都知道单文档的编程,在编程过程中发现欲使程序在启动时就能最大化显示,这里的处理方法有多种,但是结果却不一样。
首先大家最常用的就是在View类的PreCreateWindow函数中,修改窗口类型cs的值,也就是或上一个“最大化”即:

[cpp] view
plaincopy

cs.style |= WS_MAXIMIZE;

其次用得比较多的是:在app文件的InitInstance函数中修改ShowWindow函数的实参,即改

[cpp] view
plaincopy

m_pMainWnd->ShowWindow(SW_SHOW);



[cpp] view
plaincopy

m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);

这两种方法都可以达到最大化的目的,但是你会发现,当程序运行时,窗口有一个从普通窗口到最大化窗口的过程,看起来很丑,这是窗口的重画造成的。

那么解决这个问题的办法就是:在窗口重画前,让第一个窗口不要显示出来,直接显示第二个窗口,也就是最大化窗口,经过跟踪程序运行,发现在app类的InitInstance函数中有如下代码(AppWizard自动生成):

[cpp] view
plaincopy

// Parse command line for standard shell commands, DDE, file open

CCommandLineInfo cmdInfo;

ParseCommandLine(cmdInfo);

// 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_SHOW);

m_pMainWnd->UpdateWindow();

通常我们改的就是上面的倒数第二行代码,那么也就是在这行代码之前程序已经产生了一个窗口。于是在这个窗口产生前,把它“消灭”掉岂不正好。

继续跟踪,发现也就是上面提到的代码中的ProcessShellCommand(cmdInfo)这一句代码在搞鬼,所以可做如下修改:

1.在 ProcessShellCommand(cmdInfo)之前,加一句

[cpp] view
plaincopy

m_nCmdShow = SW_SHOWMAXIMIZED;

2.把m_pMainWnd->ShowWindow(SW_SHOW);修改为

[cpp] view
plaincopy

m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);

这样窗口一下子就最大化,不会再有原来的问题了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: