MFC 单文档框架最大化显示

  看到很多MFC初学者都有这样的问题:MFC单文档程序默认运行时窗口不是最大化,怎么才能使其一开始就最大化显示,其实对于这个问题,很多网友都解释的不清楚,或是不全面!

  其实这是在修改MFC的窗口界面的外观,修改MFC窗口的外观或是风格是要用到类风格(CS_XXXX)和窗口风格(WS_XXXX),学过MFC的学者都知道在WinMain函数中,最开始都定义了WNDCLASS窗口类,该类可以改变窗口的图标,背景,光标等;

  若要改变窗口的大小,一般在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中修改构造类cs的值,可以修改cs的cx,cy来改变大小;如果要最大化,就要修改cs.style|=WS_MAXIMIZE 使主框架类(CMainFrame)最大化,自然视图类(CView)创建时也会跟随主框架类(CMainFrame)而变化,但是此时显示时,仍然是没有变化,因为MFC主框架类(CMainFrame)的最后显示要通过SW_XXXX参数来决定,一些朋友就建议在CXXApp::InitInstance()中的m_pMainWnd->ShowWindow(SW_SHOW);前加入m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);或直接改掉,其实最终效果可以实现,但运行开始时会出现先是正常的小窗口,然后马上变成最大化,给人的视觉效果明显不好!

  那为什么会产生这种效果,是因为在m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);调用之前会先调用 CMainFrame::ActivateFrame(int nCmdShow);此时便会根据nCmdShow(默认为SW_SHOWNORMAL)调用显示窗口一次,SW_SHOWNORMAL会根据cs中的cx,cy,x,y来显示窗口,所以cs.style便失去作用(视图类(CView)已经创建,所以它已经是最大化了),所以再次调用m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);会形成视觉暂留!

最终解决方法是

1.重载CMainFrame::ActivateFrame(int nCmdShow)

2.令nCmdShow=SW_SHOWMAXIMIZED即可

3.在CXXApp::InitInstance()中的m_pMainWnd->ShowWindow(SW_SHOW);会根据之前的设置而显示窗口

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 MFC 文档视图应用程序中实现最大化框架,可以按照以下步骤进行操作: 1. 在视图类的头文件中添加以下成员变量: ```cpp private: CRect m_rectOriginal; ``` 2. 在视图类的 OnInitialUpdate() 函数中添加以下代码: ```cpp void CMyView::OnInitialUpdate() { CView::OnInitialUpdate(); // 获取视图原始大小 GetClientRect(&m_rectOriginal); } ``` 3. 在视图类的 OnSize() 函数中添加以下代码: ```cpp void CMyView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); // 如果窗口最大化,则调整视图大小 if (nType == SIZE_MAXIMIZED) { CRect rect; GetClientRect(&rect); // 调整视图大小 SetScaleToFitSize(rect.Size()); // 记录新的视图大小 m_rectOriginal = rect; } // 如果窗口从最大化还原,则恢复视图大小 else if (nType == SIZE_RESTORED && m_rectOriginal != CRect(0, 0, 0, 0)) { // 恢复视图大小 SetScaleToFitSize(m_rectOriginal.Size()); } } ``` 4. 在视图类的 OnUpdate() 函数中添加以下代码: ```cpp void CMyView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) { CView::OnUpdate(pSender, lHint, pHint); // 如果窗口当前已经最大化,则重新调整视图大小 if (IsZoomed()) { CRect rect; GetClientRect(&rect); // 调整视图大小 SetScaleToFitSize(rect.Size()); // 记录新的视图大小 m_rectOriginal = rect; } } ``` 5. 在应用程序类的 InitInstance() 函数中添加以下代码: ```cpp BOOL CMyApp::InitInstance() { // ... // 启用最大化框架 Enable3dControls(); Enable3dControlsStatic(); // ... return TRUE; } ``` 6. 在应用程序类的 OnIdle() 函数中添加以下代码: ```cpp BOOL CMyApp::OnIdle(LONG lCount) { // 处理未处理的 WM_SIZE 消息 MSG msg; while (PeekMessage(&msg, NULL, WM_SIZE, WM_SIZE, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } return CWinApp::OnIdle(lCount); } ``` 通过以上步骤,你就可以在 MFC 文档视图应用程序中实现最大化框架了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值