Oncreate,Oninitialupdate,Oninitdialog

VC++ MFC类库中文手册实战指南:从核心架构到高级编程 在Windows桌面开发领域,应用程序框架是构建原生界面的核心基础。MFC(Microsoft Foundation Classes)作为经典的C++框架,通过文档-视图架构和消息映射机制,实现了数据与界面的高效分离。其技术价值在于为高性能、高稳定性的工业控制、金融交易等专业领域提供了坚实的开发基础。理解MFC的运行时类信息、序列化等机制,对于维护海量遗留系统和深入掌握Windows平台编程思想至关重要。本文聚焦于**MFC核心架构**与**高级编程实战**,通过系统化的中文指南,帮助开发者解决实际开发中的 阅读详情
视的初始化,当一个文档被打开(ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen))或是新建(ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)一个文档时视图的CView::OnInitialUpdate()会被调用,你可以通过重载该函数对视进行初始化,并在结束前调用父类的OnInitialUpdate,因为这样可以保证OnUpdate会被调用。

在视图显示前调用该函数1)Oninitialupdate视图窗口完全建立后第一个被框架调用的函数。框架在第一次调用OnDraw前会调用OnInitialUpdate,因此OnInitialUpdate是设置滚动视图的逻辑尺寸和映射模式的最合适的地方。

2)时间上,Oncreate,Oninitialupdate两者先后顺序不同,构造函数生成本类的对象,但没有产生窗口,OnCreate后窗口产生,然后才是视图的OnInitialUpDate,一般在这里对视图的显示做初始化。简单点,就是ONCREATE只是产生VIEW的基本结构和变量而在OnInitialUpDate()中,主要初始化视图中控件等。对各个变量进行初始化操作。
例如在VC中调整显示照片的大小:
void CChap1_5View::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
//获取文档类指针
CChap1_5Doc* pDoc = GetDocument();
//获取DIB的指针
ImgCenterDib *pDib=pDoc->GetPDib();
//根据DIB尺寸设置视窗大小
if(pDib!=NULL)
SetScrollSizes(MM_TEXT, pDib->GetDimensions());
else{
//如果m_dib为空,则设置一个固定的尺寸
CSize sizeTotal;
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
}
我们要在视图中添加一个button和combobox控件则
OnCreate函数中写法如下:
int CFormView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CRect rect(20,20,100,50);
m_ctrlButton.Create("Button1",WS_CHILD|WS_VISIBLE,rect,this,NULL);
//创建按扭控件
CFont *pFont=CFont::FromHandle((HFONT)::GetStockObject(ANSI_VAR_FONT));
CRect rect1(150,20,350,100);
m_combobox.Create(WS_CHILD|WS_VISIBLE|CBS_SIMPLE|CBS_NOINTEGRALHEIGHT|WS_VSCROLL,rect1,this,NULL);
return 0;
}
OnInitialUpDate中写法
void CFormView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
//初始化组合框控件
m_combobox.AddString("Mondy");
m_combobox.AddString("Tuesday");
m_combobox.AddString("Wednesday");
m_combobox.AddString("Thursday");
m_combobox.AddString("Saturday");
m_combobox.AddString("Sunday");
}
另外CVIEW::OnInitialUpdate()和CDLG::OnInitDialog()出现时间都差不多,前者指的是在view马上显示之前由框架去调用的,后者是before the dialog box display ;所以OnInitDialog()也在Create()和CreateIndirect()或domodal()之后.
OnInitialUpdate()这个函数的添加方法是这样的,选择要加入函数的对话框,右键->ClassWiZard(类向导)->Message Maps(消息映射),对象里面选择对话框,Messages(消息)里面选择WM_INITDIALOG,然后点Add Function(增加函数),这样就映射到类中去了

基于VC++ 6.0的MFC画图程序开发详解 MFC中的文档-视图结构是一种将数据(文档)与显示(视图)分离的设计模式。其核心组件包括:CWinApp:应用程序类,负责整个程序的生命周期管理。CFrameWnd:框架窗口类,表示主窗口,负责承载视图。CDocument:文档类,用于管理应用程序的数据。CView:视图类,负责将文档内容显示给用户,并处理用户交互。:多文档界面(MDI)支持类。该结构的优势在于:数据与界面分离,便于维护和扩展;支持多视图显示同一文档; 阅读详情

相关推荐

速腾Helios-16P使用Lego-loam实时构建点云地图(二)——Lego-loam的编译与运行

不兼容的问题,打开lego-loam的~/lego-loam_ws/src/LeGO-LOAM/LeGO-LOAM/src下的4个源码文件,搜索/camera_init,将所有/camera_init改成camera_init,也就是去掉斜杠,这样再回到工作空间重新编译lego-loam。3、速腾16线激光雷达RS-16 ----- 3D建图算法LeGO-LOAM的使用(Ubuntu18.04 + ROS Melodic)_速腾16线 lego loam_杰尼君的博客-优快云博客。

qq_59475883的博客 2568

VC++ MFC交互式颜色选择器实现:CMFCColorButton与CMFCColorBar详解

在桌面应用开发中,用户界面交互设计是提升软件易用性的关键环节,其中颜色选择功能作为高频操作,直接影响用户体验。其实现原理通常基于控件封装与事件驱动模型,通过将颜色选取逻辑与视觉反馈组件化,实现高效、直观的交互。从技术价值看,自定义颜色选择器不仅能突破系统标准对话框的样式限制,还能深度集成应用特定功能,如文档色板、主题切换等,从而增强软件的专业性和灵活性。在应用场景上,无论是文本编辑器、绘图软件还是配置工具,一个响应迅速、可定制化的颜色选择模块都是提升工程实践效率的重要组件。本文聚焦于VC++ MFC框架,深

weixin_34221332的博客 406

《工程测量学》笔记/期末复习资料

《工程测量学》笔记/期末复习资料。

@HNUSTer的博客 5562

visual studio 2017 MFC SDI项目 添加CFormView类

visual studio 2017 MFC SDI项目 添加CFormView类 1 VS2015和VS2019现在都能很方便地分割窗口了,然而只有2017没有办法用类向导创建一个继承自CFormView类与对话框关联,但又不想重新下一个VS了实在太占空间了。没有办法,只有全网找解决方案,很多大佬都写得很好,但奈何方法太复杂,小白实在弄不好。试了N个方法,不是根本窗口不分割,就是各种奇葩报错(创建空白文档失败之类的)。在长时间的尝试无果之后,我想出了老师告诉我了一个绝妙的方法——用VS2015的文件替换

abc 1370

深入解析MSPM0系列Keil开发中‘ti_msp_dl_config.h‘缺失问题的根源与修复

本文深入解析TI MSPM0系列Keil开发中'ti_msp_dl_config.h'文件缺失问题的根源与修复方法。该错误常见于编译时提示file not found,主要因SysConfig工具未正确生成或工程路径配置错误导致。文章提供了从环境检查、手动生成文件到工程配置调整的系统化解决方案,帮助开发者快速解决这一常见KEIL开发难题。

gold的博客 970

计组实验5:cache大小测量与 cache line 大小测量

前言 今天做了实验5,通过 c 语言测 cache 参数。其实按理来说挺简单的,只是我们班没给代码,纯靠自己。听说别的班有给代码 emm 因为《深入理解计算机系统》这本书上面给的代码是 Linux 平台下的,而且需要一个 fcyc2 头文件,可以在 https://github.com/fabiensanglard/CpuCacheMountainViewer 这里找到。 ⚠ 我没有在 Linux 下试过课本上面的代码。。。 我是在 win10 下测试的。。。 所以 。。。 我并不确定我的代码是否正确。

AKGWSB 's blog 1万+

mfc创建空文档失败_代码片段:CFormView手动创建以及OnInitialUpdate

CFormView相比CDialog来说,多了个比较吸引人的优点:它继承自CScrollView。因此,天然的,CFormView就拥有了视图自动滚动的特性。动态创建继承自CFormView的子类,VS的代码生成器会自动使用如下的两个宏:DECLARE_DYNCREATE(子类的头文件)IMPLEMENT_DYNCREATE(子类的实现文件)这两个宏经过展开后的即可使类具备动态创建的特性。我们还会...

weixin_30382147的博客 736

OsgEarth实战:飞机模型动态轨迹与雷达扫描效果实现详解

本文详细介绍了如何使用OsgEarth实现飞机模型动态轨迹与雷达扫描效果。通过实战案例,讲解了模型加载、路径规划、动态轨迹绘制、飞行姿态计算以及雷达扫描效果的实现方法,并提供了性能优化技巧,帮助开发者高效完成三维可视化项目开发。

weixin_29214199的博客 303

CFormView类的用法举例

转载自:http://blog.youkuaiyun.com/laocunzhangxiashan/article/details/52176985 一.CFormView类优点: MFC创建基于对话框的应用程序存在对话框大小无法改变大小的问题.程序移植遇到不同分辨率显示器就可能产生显示不全的问题.基于CFormView的派生类可以解决这个问题. 二.单文档应用程序使用: 两种方法.

ZYunxin的博客 2129

OpenClaw 在 Docker 容器中的部署实战——零配置启动

本文介绍了OpenClaw在Docker容器中的快速部署方法,对比了本地部署与容器化部署的优势。通过官方镜像和Docker Compose两种方式,5分钟即可完成部署,并详细讲解了配置管理方案(挂载配置文件和环境变量)。文章还提供了飞书集成配置方法,以及生产环境下的日志管理、资源限制、健康检查等优化建议。最后包含常见问题排查指南,帮助开发者快速实现OpenClaw的容器化部署。

刘一说的IT专栏 904

在WSL2中配置代理(Windows)

通过按照上述步骤在WSL2中配置代理,我们可以轻松地在Windows子系统Linux中使用代理服务器访问互联网。请确保提供正确的代理服务器地址和端口号,并根据实际情况进行修改。在WSL2中使用代理是一个常见的需求,它允许我们在Windows子系统Linux中通过代理服务器访问互联网。本文将详细介绍如何在WSL2中配置代理,并提供相应的源代码示例。如果返回的IP地址与代理服务器所在地不同,说明代理正常工作。希望本文能对你有所帮助!如有其他问题,请随时向我提问。替换为实际的代理服务器地址和端口号。

FcUnity的博客 4355

在OnInitDialog(对话框)或OnInitialUpdate(表单视)中添加下面代码:

 在OnInitDialog(对话框)或OnInitialUpdate(表单视)中添加下面代码:   m_BalloonToolTip.Create(this);   m_BalloonToolTip.AddTool(GetDlgItem(), , [text color]); http://www.vchome.net/myforum/viewtheme.asp?area=25&id=1...

weixin_34146986的博客 264

RK3588 Weston

下面是使用 weston -B=vnc-backend.so --width=1280 --height=720 ,使用vnc的客户端来远程访问weston桌面。Wayland是一套display server(Wayland compositor)与client间的。,而Weston是Wayland compositor的参考实现。7:在基于wayland 运行Qt 程序。根据不同版本,支持的后端也不相同。2:当前weston支持的后端。4:weston的配置文件。3:weston中的录屏。

OpenWrt/WLAN/驱动/Android/嵌入式开发总结 1029

[转]MFC学习总结(五)

http://www.cnblogs.com/cy163/archive/2007/06/27/532871.html51. 如何获得其他程序的图标,并显示在View中 [问题提出] 有的时候,如:类资源管理器会遇到获得程序图标并显示的操作,如何实现呢? [解决方法] SDK函数SHGetFileInfo来获得有关文件的很多信息:如大小图标,属性,类型等.  [程序实现] 建立名为My的SDI

blueblood_jing的专栏 1917

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

oncreate,oninitialupdate,oninitdialog

http://www.cnblogs.com/gakusei/articles/1585209.html 时间上,oncreate,oninitial两者先后顺序不同,构造函数生成本类的对象,但没有产生窗口,OnCreate后窗口产生, 然后才是视图的OnInitialUpDate,一般在这里对视图的显示做初始化。简单点,就是ONCREATE只是产生VIEW的基本结构和变量而在OnIni

mituan1234567的专栏 935

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MFC中的几个重要函数:区别和含义

时间上,两者先后顺序不同,构造函数生成本类的对象,但没有产生窗口,OnCreate后窗口产生, 然后才是视图的OnInitialUpDate,一般在这里对视图的显示做初始化。简单点,就是ONCREATE只是产生VIEW的基本结构和变量而在OnInitialUpDate()中,主要初始化视图中控件等。对各个变量进行初始化操作。例子。我们要在视图中添加一个button和combobox控件则OnCre...

a_Treasure的博客 1203

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

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

在VC++中使用Tab Control控件

系统环境:Windows 7软件环境:Visual Studio 2008 SP1本次目的:在模态或非模态对话框中使用Tab Control控件,及引申在单/多文档中使用 查阅MSDN文档,对于创建Tab Control控件,MSDN上说明如下: To useCTabCtrldirectly in a dialog box 1.In the dialog editor, add ...

SurpassLi的专栏 32

MFC 基础

windows桌面应用分为两种类型: 基于文档视图类型 和 基于对话框类型。通常具有复杂交互控件的程序即为基于对话框类型,相对而言比较复杂,而基于文档视图类的应用交互形式比较单一,相对简单。

yuanshenqiang的博客 807

OnInitialUpdate函数 UpdateAllViews函数 说明

virtual void OnInitialUpdate( ); 视图窗口完成建立后第一个被框架调用的函数,框架在第一次调用OnDraw前会调用OnInitialUpdate,因此OnInitialUpdate是设置滚动视图的逻辑尺寸和映射模式的最适合的地方。        时间上,两者先后顺序不同,构造函数生成本类的对象,但没有创建窗口,OnCreate后窗口产生,然后才是视图的OnIn

laoye_laoye的专栏 2102

MFC对话框程序中的OnCreate和OnInitDialog函数

最近做一个简单的项目,需要使用到MFC。虽说这个东西已经很老旧了,但是为了项目使用,开始学它。需要将一个osg三维文件显示在控件中,这里使用编辑框空间,调试过程中遇到了CEdit* e = (CEdit*)GetDlgItem(IDC_EDIT1);其中e的值为NULL,也就是说没有get到控件。遂去图书馆,翻书找到问题所在由于将GetDlgItem放在了OnCreate中,而OnCreate是在

CoderGo的专栏 5444

对话框程序中的OnInitDialog()函数的作用是什么?

在创建对话框(创建对话框的方法有:Create(),CreateIndirect(),DoModal())时,Windows发送WM_INITDIALOG消息到该被创建的对话框,这就立即激发该对话框的OnInitDialog()函数,即,在显示该对话框前使用OnInitDialog()函数初始化该对话框的数据及内容,以及可以使用该函数在显示对话框前布置控件的显示大小及位置。 重写此方法的目的是如果...

三余丨无梦生 1万+

MFC——OnInitDialog()/DoModal()/OnPaint()小记

最近在使用MFC中经常遇到这几个函数,却始终不知道在VS中是函数间是如何调用最终在对话框中画出图像的,在这做一个小结。 1.DoModal函数的用法? 使用有模式对话框时在对话框弹出后调用函数不会立即返回,而是等到对话框销毁后才会返回(请注意在对话框弹出后其他窗口的消息依然会被传递)。所以在使用对话框时其他窗口都不能接收用户输入。创建有模式对话框的方法是调用CDialog::DoModal...

goldcarpenter的博客 4486

OnInitialUpdate 被调用两次问题

OnInitialUpdate  这个函数在MSDN中讲到,Override this function to perform any One-Time initialization that requires information about the document.d OnInitialUpdate  OnInitialDialog 两者性质差不多。 都是用于初始化界面的,由

promotercx的专栏 4261

OnPaint和OnDraw有什么区别?

OnPaint和OnDraw有什么区别?CPaintDC和CClientDC又有什么区别? --------------------------------------------------------------------------------1) 在mfc结构里 OnPaint是CWnd的成员函数. OnDraw是CView的成员函数.2) OnPaint()调用OnDraw(),OnP

龙行天下 2747
上一篇: AFXWIN.H 源码
下一篇: MFC文档视图(四):类之间的调用
heary29
博客等级 码龄12年 37粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值