MFC窗口启动最大化

本文介绍了使用MFC进行编程时实现窗口最大化的方法,包括通过修改窗口样式、调整窗口尺寸及利用ShowWindow函数的不同参数实现最大化效果,同时解决了窗口从正常状态过渡到最大化状态时的视觉问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用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);  
这样窗口一下子就最大化,不会再有原来的问题了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值