MFC让窗口一开始就最大化

MFC对话框最大化/窗口化及控件自适应缩放以及嵌套窗口缩放 1. 实现方法(计算窗口放大/缩小比例,控件相应缩放并改变位置,但会存在一定问题) 先在窗口类的头文件中添加相应变量与函数(其中OnSize由类向导消息WM_SIZE生成): // XXXDlg.h // 窗口放大所需变量 private: BOOL m_IsInitialized; int m_nOldCx, m_nOldCy; // 变量需要在类的构造函数中初始化 public... 阅读详情

看原帖,本贴尾有链接

 

作者: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();

问题解决。

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/jianzhanger/archive/2009/02/18/3904798.aspx

 

MFC去掉窗口右上方最大化最小化关闭按钮 阅读详情

相关推荐

掌握MFC中的窗口最大化和最小化编程技术

本文还有配套的精品资源,点击获取 简介:在开发Windows应用程序时,处理窗口的最大化和最小化是常见需求。MFC提供了丰富的类库和接口支持这一功能。本文将详细讨论如何通过CWnd类中的ShowWindow和SetWindowPos成员函数,以及响应WM_SIZE消息来实现窗口的最大化和最小化。同时,还会介绍如何利用Visual Studio的资源编辑器设置对话框的“最大”...

weixin_42560991的博客 2758

MFC实现全屏显示

有些软件或者游戏需要全屏显示不受其他窗口的干扰的话,需要全屏显示,这样鼠标

Jockr 3195

Halcon像素比例标定(误差大)-相机标定

一种简易标定: 像素比例标定,如果需要精确一些则需要在高度和宽度上都需要计算,然后求出比例系数。需要高精度标定板和相机,以及多次标定才能达到稳定的状态,这种标定简单,但是误差大。 read_image (Img0008, 'D:/00项目代码/000视觉软件/02Halocn算法20190501/04测量20190424/07_比例计算测量标定/IMG0008.jpg') rgb1_to_...

SSSS的博客 3985

mfc如何实现全屏功能

很多的播放器都有快捷键控制窗口以全屏幕的方式显示。给应用程序加上全屏幕的功能,并不需要很多的代码,比如给一个基于对话框的应用程序加上全屏功能只需要以下少量代码就可以工作了。 很多的播放器都有快捷键控制窗口以全屏幕的方式显示。给应用程序加上全屏幕的功能,并不需要很多的代码,比如给一个基于对话框的应用程序加上全屏功能只需要以下少量代码就可以工作了。代码如下:...

weixin_34185364的博客 786

告别电源纹波!手把手教你用UCC28019设计一个高效率PFC模块(附完整原理图与BOM清单)

本文详细介绍了如何使用UCC28019设计高效率PFC模块,解决电源纹波问题。通过优化补偿网络、关键元器件选型及PCB布局,实现功率因数提升至0.99以上,降低输入电流谐波。附完整原理图与BOM清单,适用于电赛等快速开发场景。

weixin_42652674的博客 335

Fedora 41上安装钉钉7.6.25,我踩过的那些依赖坑和最终解决方案

本文详细记录了在Fedora 41上安装钉钉7.6.25版本的全过程,包括解决依赖问题、转换deb包为rpm格式、处理libm.so.6错误等关键步骤。通过分享这些实用技巧和最终解决方案,帮助Linux用户顺利在Fedora系统上运行钉钉客户端,提升工作效率。

weixin_30485379的博客 206

一种简单实用的全屏方法

实现程序全屏幕显示的思路有很多种,最常见的一种就是:  1)利用Windows API提供的一个结构体WINDOWPLACEMENT来存储全屏显示前视图和主框架窗口在屏幕上的位置和显示信息、非客户区窗口的显隐信息,以便全屏幕显示时恢复窗口原状;  2)通过API函数GetDesktopWindow()得到桌面窗口,由GetWindowRect()得到显示器的尺寸;  3)通过AdjustWindo

xlzxlich的专栏 3097

5分钟搞定!用Keil MDK将STM32F103C8T6工程无缝迁移到ZET6开发板

本文详细介绍了如何在Keil MDK环境下快速将STM32F103C8T6工程迁移到ZET6开发板,涵盖硬件差异对比、工程配置调整、外设适配及编译排错等关键步骤,帮助开发者5分钟内完成工程移植,大幅提升开发效率。

weixin_30879169的博客 409

MFC对话框启动默认最大化

在OnInitDialog()函数添加:在其中添加如下语句:ShowWindow(SW_MAXIMIZE);BOOL CMFrame::OnInitDialog(){         CDialogEx::OnInitDialog();         ......         ShowWindow(SW_MAXIMIZE);//对话框默认最大化弹出         returnTRUE;}...

hshqing的博客 8573

cocos2dx lua + protobuf

vs 2015 cocos2dx 3.10  lua  protobuf1. 下载 protobuf 源码     https://github.com/bnnswyp/protobuf/tree/master/protobuf-2.5.0    解压后的文件列表如下所示         其中 vsprojects 文件夹为 protobuf 的vs 工程2. 打开 protobuf.sln 编译...

u014486706的博客 2163

Ollama DNS 重新绑定攻击 (CVE-2024-28224)

一旦 DNS 重新绑定攻击成功,攻击者就可以对这些 API 进行排序,以读取 Ollama 运行的进程可访问的任意文件数据,并将这些数据泄露到攻击者控制的系统中。完成对“创建模型” API 请求的调用后,Ollama 将收集组成新创建的用户模型的许多工件,包括大型语言模型数据、许可证数据等,以及我们要提取的文件,所有这些都可以通过其 SHA256 内容进行寻址。这是我们要窃取的文件,在我们的示例中,是可通过运行 Ollama 的主机上的路径名访问的现有文本文件。值得注意的是,该模型配置为通过参数中的。

技术超强的网络安全平台 1648

MFC实现对话框的最大化功能

想必大家都有在使用MFC写完程序之后,想让写的程序在点击最大化或者使用鼠标拖住边框之后,也能让窗口内各个控件大小及其位置的也随之改变。 这里使用的原理就是利用 MoveWindow、SetWindowPos 等函数进行窗口内各个控件大小及位置的改变! 实现过程: 新建一个对话框,在界面上布置好自己的控件。 为对话框添加"最大化"按钮,对话框的Maximize Box属性设置为True 在这里自己可以进行尝试看看效果 添加响应 WM_SIZE 消息,进行各个控件位置的调整: void CM

qq_43630810的博客 2777

Python与CAD系列基础篇(二)创建点和直线并修改样式

①通过pyautocad连接AutoCAD进行处理②通过ezdxf处理dxf格式文件。创建和编辑点和直线的方法,并演示如何修改它们的样式、颜色和线型。

weixin_43894929的博客 3036

MFC让窗口一开始就最大化探讨

一般的做法是在 C**App::InitInstance()中,修改成这样:{ //... m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED); m_pMainWnd->UpdateWindow(); //...}或者,还在 CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中,添加:{ //... cs.style |= WS

1528

3.3 数据导入与导出方法

Simulink 提供了多种数据导入与导出方法,能够满足不同场景下的需求。无论是从 MATLAB 工作区或外部文件导入数据,还是将仿真结果导出到工作区或文件,这些功能都极大地增强了模型的灵活性和实用性。掌握这些方法后,用户可以更高效地完成复杂系统的建模与分析任务。

xiaoheshang_123的博客 318

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

doc_view结构中让窗口一开始就最大化探讨作者:enoloo 一般的做法是在 C**App::InitInstance()中,修改成这样:{ //... m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED); m_pMainWnd->UpdateWindow(); //...}或者,还在 CMainFrame::PreCreateWindow(CREATESTRUC

星光中的灯 4877

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

MFC窗口最大化

在一个单文档应用程序中 (1)要想使窗口最大化显示,只要在应用程序类的InitInstance函数中将 m_pMainWnd->ShowWindow(SW_SHOW); 改为 m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED); (2)要想使窗口禁用最大化按钮,只要在主框架MainFrame类的PreCreateWindow函数中添加如下代码

wpf的技术博客 2020

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MFC窗口启动最大化

常用MFC进行编程的人都知道单文档的编程,在编程过程中发现欲使程序在启动时就能最大化显示,这里的处理方法有多种,但是结果却不一样。 首先大家最常用的就是在View类的PreCreateWindow函数中,修改窗口类型cs的值,也就是或上一个“最大化”即: cs.style |= WS_MAXIMIZE; 其次用得比较多的是:在app文件的InitInstance函数中修改ShowWindo

蜗隼的专栏 3756

MFC学习笔记——如何使窗口最大化,但不遮盖任务栏

使用ShowWindow(SW_MAXIMIZE),使对话框最大化后,任务栏也被遮住了,如何去掉任务栏的遮盖?而且对话框窗口还处于激活状态。此时,应该没有设置WS_CAPTION属性,只能自己MoveWindow。函数ShowWindow(SW_MAXIMIZE)应该是在OnInitDialog()中调用的。ShowWindow(SW_MAXIMIZE)是覆盖任务栏的。 用下面代码代替之 C

山上有只羊M 7226

MFC窗口大小最大化最小化随拖动调整大小

选择需要支持的对话框属性,开启Title Bar功能,开启System Menu ,Maximize Box ,Minimize box功能,这样我们的主界面就可以支持最大化,最小化,同时Border属性设置为Resizing模式,可以拖动改变大小.//第一个保存的是对话框的Rect。通常我们的MFC窗口默认是没有可以选择的最大化和最小化,开发用户可以选择支持最大化,最小化属性功能.用来盖改变窗体大小,并记录窗口信息,退出时候保存,下次加载时候自动恢复上次保存的窗口大小.

u011637657的博客 2828

MFC中窗口最大化以后GetWindowRect获取的大小

对话框的最大化 MFC新建一个基于对话框的程序,资源里添加一个按钮,GetWindowRect,双击该按钮,添加响应函数 void CtestDialogDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 CRect rc; CString str; this->GetWindowRect(rc); str.Format(_T("GetWindowRect:(%d,%d,%d,%d)"), rc.left, rc.top, rc.righ

htj10的博客 954

vs2017VC++_MFC_窗口控件随窗口大小自适应-最大化与还原

vs2017VC++_MFC_窗口控件随窗口大小自适应-最大化与还原 1、首先在OnInitDialog函数中获取窗口位置坐标 BOOL CMFCApplication1Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(

Txwtech 3138

VC++MFC 窗口最大化

VC++MFC 窗口最大化、最小化的实现!     当利用AppWizard生成运用程序框架时,VC++已经为我们在标题条上做好了最大化,最小化及恢复按钮。     但有时我们也想在其它地方使用这些功能。这就可采用下面的办法。     在指定的消息处理函效中加入下列语句,则程序在收到该条消息后即执行窗口最小化。 WINDOWPLACEMENT lwndpl; WINDOWPLAC

jasonkent27的专栏 775
上一篇: int main(int argc,char *argv[])中两个参数的说明
下一篇: 图表 控件 MSChart
th0624
博客等级 码龄19年 11粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值