孙鑫VC学习笔记:第十三讲 (三) WM_FILE_NEW消息响应原理

孙鑫VC++深入详解:Lesson5 Part4 屏幕字符串滚动输出,DrawText,SetTimer,WM_Timer消息 滚动字母,修改输出字幕颜色,定时器 在onCreate中添加一个定时器,即SetTimer(1,100,NULL) 再在类CDrawView中添加消息WM_TIMER的响应函数OnTimer 每间隔100毫秒被调用OnTime() 在OnTime()中用DrawText输出字符串,DrawText的输出宽度每次按照5像素宽度增加, 随着矩形宽度增加,那么显示出来的字符串就逐步增加,效 阅读详情
WM_FILE_NEW消息响应原理

当点击“新建”按钮时,会发送WM_FILE_NEW消息,按照消息响应函数的命名规则,
它的响应函数应该叫OnFileNew(),但是在代码中找不到,
通过调试发现,当新建按钮时,程序会调用CGraphicDoc::OnNewDocument(),
WM_FILE_NEW的消息是如何响应的呢?

我们可以在VC++的安装目录下找到一个文件
../Microsoft Visual Studio/VC98/MFC/SRC/APPDLG.CPP
在这个文件中,有一个CWinApp::OnFileNew()函数,它是这样定义的:
 Void CWinApp::OnFileNew()
 {   if (m_pDocManager !=NULL) m_pDocManager->OnFileNew();}
 
 m_pDocManager是这样定义的:CDocManager * m_pDocManager;
CDocManager 是一个文档管理器,它有一个指针链表,维护一系统的文档模版指针。

接着,我们可以在../Microsoft Visual Studio/VC98/MFC/SRC/DOCMGR.CPP文件中找到
CDocManager::OnFileNew()的定义。

再次按下“新建”按钮时,由于框架类对象和视类对象已经创建了,在单文档中没有必要重复创建,
它会重复利用已经创建好的框架类对象和视类对象。
如果是多文档程序则会重复创建框架类对象、视类对象和文档类对象。
---------------------------------------------------------------------------------
按下“打开”与“保存”按钮时,会执行CGraphicDoc::Serialize方法
在CGraphicDoc类中有个Serialize(CArchive& ar)方法,是文档类提供的用来保存数据和加载数据的函数,其参数就是一个CArchive对象。
注意:如果将一个文件保存之后,马上打开它,程序将不会调用本方法加载数据,
       因为当我们保存数据的时候,以前创建的文档类对象与保存的数据关联在一起了,
       再次打开刚保存的文件时,MFC框架内部识别出是同一份数据,因为与数据相关的文档类指针已经存在
       所以程序不会调用Serialize(CArchive& ar)方法加载相同的数据。 

测绘程序设计——试题一:出租车轨迹数据计算 仅展示试题1的原文,如需了解其余内容,请自行购买图书李老师著作主页-http://ybli.users.sgg.whu.edu.cn/book/ 阅读详情

相关推荐

STM32U575 ADC+DMA+UART数据采集实战:CubeMX配置避坑与代码实现

在嵌入式开发中,ADC采集与DMA传输是提升系统实时性的关键技术。通过DMA将ADC数据直接搬运到内存,可大幅降低CPU占用,实现高效连续采样。结合UART的DMA发送,能进一步解放CPU,适用于工业采集、信号监测等场景。本文以STM32U575为例,详解CubeMX中ADC、DMA、UART的配置要点,包括时钟树、DMAMUX映射、循环模式等,并给出代码实现与常见问题排查,帮助开发者快速构建稳定的数据采集链路。

weixin_29194255的博客 169

孙鑫VC学习笔记:第十三讲 WM_FILE_NEW消息响应原理

WM_FILE_NEW消息响应原理当点击“新建”按钮时,会发送WM_FILE_NEW消息,按照消息响应函数的命名规则,它的响应函数应该叫OnFileNew(),但是在代码中找不到,通过调试发现,当新建按钮时,程序会调用CGraphicDoc::OnNewDocument(),WM_FILE_NEW的消息是如何响应的呢?我们可以在VC++的安装目录下找到一个文件../Microsoft Visu

遐迩思的专栏 1812

kmeans聚类分析结果怎么看_【Stata与机器学习】物以类聚-KMeans算法应用案例介绍...

古语有云:物以类聚,人以群分。KMeans是无监督机器学习中的聚类算法中最简单的一种——基于特征对样本进行归为不同的类,很好地阐述了‘物以类聚’这句话的精髓。机器学习又叫统计学习。既然都统计了,所以当然包括了计量经济学。所以一般来说,机器学习的算法类型远多于计量经济学。比如线性回归,这个算是机器学习算法中比较基础的部分。当然,计量经济学在回归分析、因果推断方面的造诣,也是普通机器学算法所不能比的。...

weixin_39857480的博客 1万+

关于MFC中如何调用CWinApp::OnFileNew()和OnFileClose()

来源:http://blog.163.com/bbluesnow@126/blog/static/27784545201262802046540/ 今天在做项目的时候,需要点击一个按钮来创建新的View视图,即需要想办法调用CWinApp::OnFileNew()函数,无奈这个函数是protected类型的,没法显示调用。MFC消息机制没有学好,折腾了好久才解决。唉,又一次感到知识匮乏啊

gll028的专栏 3952

抖音用户评论和ID的采集方法

随着5G时代的普及,各大运营商的套餐纷纷推出,使得流量成本进一步降低。同时5G线路高宽带、低延迟的技术特性和手机普及,让视频用户访问量快速增加。 由于大量的视频工具和拍摄APP的提供,让短视频的拍摄、制作包括发行都变得更加简单便捷,越来越多的普通人可以投入视频创作,创造了更丰富的互联网内容,视频作者从视频推广中能获取粉丝和推广收益。 目前抖音就是目前最重要的短视频平台之一,要及时获取上面的用户评论和ID,需要结合爬虫代理实现采集方案,下面的代码就能快速采集相关信息: package htmlunit; i

ssbt_2020的博客 6787

让 RAP 弹窗参数真正变成必填:Excel Upload Action 的两种实现路径

摘要 在RAP应用中,action弹窗参数经常缺乏必填校验,导致用户体验差。本文提出两种解决方案:1)在action实现中手动校验,简单但交互不流畅;2)通过root abstract entity和abstract BDEF建模,利用field(mandatory)实现框架级校验,推荐此长期方案。后者将约束集中到模型层,使UI与执行期校验一致,特别适合ABAP Cloud环境。以Excel导入为例,强制填写备注和明确选择试运行,可避免审计问题,提升系统可靠性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 197

MFC-文档视图

MDI程序       MiniDraw只有一个About对话框,这回要把它变成一个MDI程序,借助于文档视图的威力,并不需要花很大的力气。       MDI由4个类组成:主框架类,由CMDIFrameWnd派生而来,表示程序的MDI父窗口。子框架类,由CMDIChildWnd派生而来,表示程序的MDI子窗口。视图类,由CView派生而来,表示一个文档视图,内嵌于子窗口。

colin 8555

手把手教你学Simulink——基于Simulink的固态变压器(SST)多级协同控制

摘要:本文详细介绍了基于Simulink的固态变压器(SST)多级协同控制方法。SST作为新一代智能电网核心设备,通过AC-DC整流、DC-DC隔离和DC-AC逆变三级架构实现电能高效转换。针对多级耦合难题,提出能量-功率协同控制策略:纵向解耦电压环与功率前馈,横向联动级间功率指令。在Simulink中搭建10kV/400V系统模型,实现直流母线电压波动<2%的动态性能。特别设计了负载突变时的三级协同机制,通过虚拟惯性算法和前馈控制实现快速响应。文章包含完整的建模步骤、控制推导和参数设置,为电力电子工

MHD0815的博客 193

ID_FILE_NEW消息和ID_FILE_OPEN消息

转自http://kb.cnblogs.com/a/2357724/和http://blog.youkuaiyun.com/godknows007/article/details/6192925   有详细代码                   MFC默认会发送ID_FILE_NEW消息,调用CWinAppEx::OnFileNew(),在这个函数里会有m_pDocManager-> OnFileNew

chenlanjie842179335的专栏 7134

在 ABAP 平台上搭建 OAuth 2.0 Server:架构、流程、权限与落地实战

摘要:本文为SAP ABAP开发人员提供将ABAP平台配置为OAuth 2.0授权服务器的实战指南。重点介绍两种授权流程(授权码和SAML Bearer)的实现方案,包括核心事务配置(SOAUTH2/SAML2)、授权对象(S_SCOPE)管理以及端点交互规范。通过具体配置清单和三类典型集成场景(第三方Web应用访问OData、企业集成平台调用、BTP应用对接)的落地示例,帮助读者快速构建安全的OAuth 2.0服务架构。文档强调SSL/TLS基础安全、scope最小授权原则以及授权与令牌端点的标准交互模式

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 307

把 SAP ABAP ALE 与 IDoc 玩明白:从架构、配置到排错的一套闭环方法

本文介绍了SAP集成中ALE与IDoc的核心概念与实战应用。ALE作为SAP分布式应用框架,通过异步消息机制实现系统间数据交换,其三层架构隔离业务与传输细节。IDoc作为标准化消息容器,包含控制、数据和状态记录。文章详细解析了配置要点(端口、伙伴参数)、处理流程(Process Code)、排错工具(BD87、WE09)及同系统测试方法,并提供了发送程序代码骨架。通过架构认知→配置→开发→运维的完整路径,帮助读者掌握ALE/IDoc的实际操作技能。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 221

关于OnFileNew()的定制

关于OnFileNew()的定制1、问题的提出使用MFC自动创建的应用程序中,对文档的新建和打开提供较好的支持。但是当我们的应用程序要求支持多种文档类型(注意不是多文档)时问题就出现了——当我们要创建一个新的文档时只能从MFC提供的默认的(也是十分简单的)CNewTypeDlg对话框中选择我们想要创建的文档类型。默认的CNewTypeDlg中文档模板名称的显示最长只有6个字符,给的信息是十分的少,

1570

《UDS协议从入门到精通》系列——图解0x10:诊断会话控制

什么是诊断会话控制服务?切换模式时ECU要做哪些?有没有通信示例?本文全网最详解!!

车载系统攻城狮 1万+

孙鑫VC++深入详解:Lesson8 Part3---如何让对话框捕获WM_KEYDOWN消息?

因为对话框程序中,某些特点的消息,如按键消息被Windows内部的对话框过程处理了,即基类完成了或者被发送给子控件处理,所以在对话框类中就不能捕获到按键消息 解决办法:在子类中覆盖基类的特定消息过滤响应函数. 在MFC中,用虚函数ProcessMessageFilter()来过滤或者响应菜单和对话框的特定Windows消息. 在子类中覆盖它,接管消息响应. 本例中,在CWinSun

-----------------------------不要在跟自己无关的事情上浪费时间 3209

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

孙鑫VC学习笔记:第四讲 MFC消息映射机制和CDC类的使用

1.在文档-视图结构中,View类总是覆盖在CMainFrm框架窗口之上的.所以框架窗口无法对   WM_LBUTTONDOWN消息做出响应. 2.在添加WM_LBUTONDOWN后,查看我们的工程的源程序变化   查看 DrawView.h ------------------------------------------------------------------------

456

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

孙鑫VC学习笔记:第四讲 MFC消息映射机制和CDC类的使用 收藏

 1.在文档-视图结构中,View类总是覆盖在CMainFrm框架窗口之上的.所以框架窗口无法对  WM_LBUTTONDOWN消息做出响应.2.在添加WM_LBUTONDOWN后,查看我们的工程的源程序变化  查看 DrawView.h-------------------------------------------------------------------------------

vooohooodooo的专栏 507

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

孙鑫VC++深入详解:Lesson6 Part5--- 给自建的动态子菜单配置COMMAN消息响应函数

在MainFrm.cpp文件中的 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)  中创建好子菜单: CMenu menu; menu.CreatePopupMenu(); //初始化对象menu --- 创建一个空的弹出菜单 GetMenu()->InsertMenu(2,MF_BYPOSITION|MF_POPUP,(U

-----------------------------不要在跟自己无关的事情上浪费时间 2490

孙鑫VC++讲座笔记-(4)MFC消息映射机制的剖析

孙鑫VC++讲座笔记-(4)MFC消息映射机制的剖析   一,消息映射机制 1,消息响应函数:(例:在CDrawView类响应鼠标左键按下消息)     1)在头文件(DrawView.h)中声明消息响应函数原型。         //{{AFX_MSG(CDrawView)   //注释宏         afx_msg void OnLButtonDown(UINT nFlag

无知人生,记录点滴 2642

MFC(菜单,孙鑫C++第六讲笔记整理)

1.当对某菜单添加消息响应函数时,4个类的消息响应优先次序分别是:a.View;b.CDOC;c.CMainFrame.d.CWinAPP.为什么?请参阅《深入浅出》   2.消息分类:a;标准消息(以WM_开头的消息,但不包括ON_COMMAND);b;命令消息 ON_COMMAND(IDM_PHONE1, OnPhone1),菜单和工具栏的消息。c.通告消息:按钮,列表框发出的消息。

hellokazhang的博客 5558

孙鑫VC++视频学习笔记之5: VC菜单相关编程

<br />  阅读本文前,我们假设您已经:<br />   1,知道如何创建一个单文档的App Wizard<br />   2,知道C++ 类、函数重载等简单知识<br />   3,知道如何给View类或者Doc文档添加成员变量<br />   4,会用MFC的IDE调试工具最好,那么本文的程序您可以copy去调试<br />   5,知道如何为某个框架类添加虚函数或消息处理函数<br /><br />  一、 消息的分类:<br /><br />  消息的分类:标准消息,命令消息,通告消息。<br

Bilter的专栏 1682

孙鑫MFC消息映射机制的剖析

一,消息映射机制 1,消息响应函数:(例:在CDrawView类响应鼠标左键按下消息)  1)在头文件(DrawView.h)中声明消息响应函数原型。 //{{AFX_MSG(CDrawView)   //注释宏 afx_msg void OnLButtonDown(UINT nFlags, CPoint point); //}}AFX_MSG   //注释宏 说明: 在注释宏之

明月松间照,清泉石上流! 1035
上一篇: 孙鑫VC学习笔记:第十三讲 (二) 设置文档标题
下一篇: 孙鑫VC学习笔记:第十三讲 (四) 生成可串行化的类
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值