MFC窗口启动最大化
2013-04-23 21:38
316 查看
常用MFC进行编程的人都知道单文档的编程,在编程过程中发现欲使程序在启动时就能最大化显示,这里的处理方法有多种,但是结果却不一样。
首先大家最常用的就是在View类的PreCreateWindow函数中,修改窗口类型cs的值,也就是或上一个“最大化”即:
1.禁止窗口最大化等按钮
修改PreCreateWindow()函数如下:
BOOL CWndMain::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE;
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
cs.style &= ~WS_MAXIMIZEBOX; //禁止窗口最大化
cs.style &= ~WS_MINIMIZEBOX; //禁止窗口最小化
// cs.style &= ~WS_SYSMENU; //取消Title上的按钮
cs.style &= ~WS_THICKFRAME;//使窗口不能用鼠标改变大小
cs.lpszClass = AfxRegisterWndClass(0);
return TRUE;
}
2.改变MFC单文档窗口的大小
当用vc++的MFC设计单文档程序时,vc会自动生成一个默认的窗口,当我们要用的窗口与默认的设置不同时,
我们就要修改其中的某些参数,下面是如何改变生成文件时窗口大小的修改:打开 fileview选显卡——>找到
MainFrm.cpp打开——>找到BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 如下:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return TRUE;
}
在里面就可以修改初始窗口大小了!
例子:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.cx=500;
cs.cy=500;
return TRUE;
}
3.改变MFC单文档窗
[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);
这样窗口一下子就最大化,不会再有原来的问题了!
首先大家最常用的就是在View类的PreCreateWindow函数中,修改窗口类型cs的值,也就是或上一个“最大化”即:
1.禁止窗口最大化等按钮
修改PreCreateWindow()函数如下:
BOOL CWndMain::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE;
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
cs.style &= ~WS_MAXIMIZEBOX; //禁止窗口最大化
cs.style &= ~WS_MINIMIZEBOX; //禁止窗口最小化
// cs.style &= ~WS_SYSMENU; //取消Title上的按钮
cs.style &= ~WS_THICKFRAME;//使窗口不能用鼠标改变大小
cs.lpszClass = AfxRegisterWndClass(0);
return TRUE;
}
2.改变MFC单文档窗口的大小
当用vc++的MFC设计单文档程序时,vc会自动生成一个默认的窗口,当我们要用的窗口与默认的设置不同时,
我们就要修改其中的某些参数,下面是如何改变生成文件时窗口大小的修改:打开 fileview选显卡——>找到
MainFrm.cpp打开——>找到BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 如下:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return TRUE;
}
在里面就可以修改初始窗口大小了!
例子:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.cx=500;
cs.cy=500;
return TRUE;
}
3.改变MFC单文档窗
[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);
这样窗口一下子就最大化,不会再有原来的问题了!
相关文章推荐
- 如何让MFC窗口启动时最大化
- 如何让MFC窗口启动时最大化
- MFC单文档程序启动时窗口最大化
- mfc 窗口启动最大化
- MFC单文档工程窗口在启动时默认最大化
- MFC窗口启动最大化
- MFC 窗口启动后默认最大化,覆盖了任务栏,解决办法
- MFC窗口启动最大化
- 如何让窗口和 MDI窗口一启动就最大化和最小化?
- MFC 窗口最大化和最小化,全局变量的使用、static居中显示、static的背景色设置为透明、根据屏幕自适应调整界面大小
- VS2013MFC单文档- 为窗口添加启动页面
- MFC 多文档 最大化父窗口和子窗口
- MFC控件和背景图片自适应窗口最大化和拉伸缩放的实现
- MFC基于Dialog的窗口程序启动时最小化到托盘
- VS2010 MFC 启动立刻隐藏窗口 最小化托盘
- MFC让窗口一开始就最大化探讨
- VC++MFC 窗口最大化、最小化的实现!
- 窗口启动时最大化
- MFC单文档窗口最大化显示
- MFC带标题栏的窗口和不带标题栏的窗口最大化