消息传递过程--发布日期:2007-9-1

7、Oracle RAC 架构与组件深度解析 本文深入解析了Oracle RAC架构及其核心组件,包括网络配置、Infiniband互连实现、集群软件管理、安装规划、网格基础设施应用、守护进程结构、网络组件配置、共享组件管理、故障转移机制、性能优化与安全建议等内容,旨在帮助用户全面了解和高效部署Oracle RAC系统以实现高可用性和性能提升。 阅读详情


据说是在Run中调用AfxWndProc(侯捷说的我在源码中找了会没找到,也不晓得是哪个间接调用的),在该函数里面接着调用AfxCallWndProc,然后AfxCallWndProc中有这么一段

// special case for WM_INITDIALOG

CRect rectOld;

DWORD dwStyle = 0;

if (nMsg == WM_INITDIALOG)

_AfxPreInitDialog(pWnd, &rectOld, &dwStyle);

// delegate to object's WindowProc

lResult = pWnd->WindowProc(nMsg, wParam, lParam);

// more special case for WM_INITDIALOG

if (nMsg == WM_INITDIALOG)

_AfxPostInitDialog(pWnd, rectOld, dwStyle);

如果不是WM_INITDIALOG消息则调用CWnd的WindowProc,这时就有点迷惑了,应该说CCmdTarget是处理消息的基类其中的OnCmdMsg为什么不先调用呢,其实我也不清楚,查看了源代码后发现在WindowProc中会判断消息的类型里面有这么段:

CWnd::WindowProc

if (message == WM_COMMAND)

{

       if (OnCommand(wParam, lParam))

       {

              lResult = 1;

              goto LReturnTrue;

       }

       return FALSE;

}

       CWnd::OnCommand

如果是命令消息加速键等用户接口对象的WM_COMMAND通知消息(有些控件也会发送此消息比如按钮的单击),则调用OnCommand处理,而在OnCommand中会判断是一般命令消息还是控件消息,其中如果不是控件消息的话会调用OnCmdMsg(nID, CN_UPDATE_COMMAND_UI, &state, NULL);看到了吧这里就调用了从CCmdTarget继承来的虚函数(我只找到了CWnd的这个地方调用了改消息)。

接着是控件消息

// special case for notifies

if (message == WM_NOTIFY)

{

       NMHDR* pNMHDR = (NMHDR*)lParam;

       if (pNMHDR->hwndFrom != NULL && OnNotify(wParam, lParam, &lResult))

       goto LReturnTrue;

       return FALSE;

}

关于WM_NOTIFY的一点说明: Win32使用新的WM_NOFITY来处理复杂的通知消息。WM_COMMAND类型的通知消息仅仅能传递一个控制窗口句柄(lparam)、控制窗ID和通知代码(wparam)。WM_NOTIFY能传递任意复杂的信息。

因此控件消息也得以处理,WindowProc后面的消息处理可想而知了即其他WM开头的Windows标准消息。

CFrameWnd中改写了OnCmdMsg

BOOL CFrameWnd::OnCmdMsg(UINT nID, int nCode, void* pExtra,

       AFX_CMDHANDLERINFO* pHandlerInfo)

{

       CPushRoutingFrame push(this);

       // pump through current view FIRST

       CView* pView = GetActiveView();

       if (pView != NULL && pView->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))

              return TRUE;

       // then pump through frame

       if (CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))

              return TRUE;

       // last but not least, pump through app

       CWinApp* pApp = AfxGetApp();

       if (pApp != NULL && pApp->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))

              return TRUE;

       return FALSE;

}

由于在CFrameWnd中产生的消息一般都是WM_COMMAND消息,因此当CWnd::WindowProc被调用时会转到OnCommand而CFrameWnd又改写了CWnd的OnCommand那么CFrameWnd的OnCmdMsg是如何被调用的呢,原来在CFrameWnd::OnCommand中调用了CWnd的OnCommand,显然CFrameWnd::OnCmdMsg就被调用了,由上面的CFrameWnd::OnCmdMsg可以清楚的看到CFrameWnd对标准消息传递的过程的改写首先让当前的活动视图处理,通过查看视图的源代码可以发现视图的OnCmdMsg先让CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)处理(最终就是调用CCmdTarget::OnCmdMsg,通过查看源代码可以发现// look through message map to see if it applies to us,其实就是查找此视图及相关基类的消息映射表进行相应的处理),接着是让m_pDocument->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);处理,不用查看文档的代码也可以猜到文档模板的OnCmdMsg会调用,当视图的OnCmdMsg返回后如果没有处理的话又会调用CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)(此时是CFrameWnd处理),最后如果还没有处理的话又给App对象处理,一直到让DefWindowProc处理。

对话框的消息处理与此不同,具体可以根据源代码追踪

呵呵,第一次跟踪查找MFC源代码,不知道以上结论正确与否,不过对我理解消息传递的过程还是有点帮助,写下来以免忘了。

7、深入解析RAC相关概念与组件配置 本文深入解析了Oracle RAC(Real Application Clusters)的关键概念与组件配置,涵盖网络架构、Infiniband互连技术、集群软件演进、Grid Infrastructure安装规划及其在单实例环境中的应用。详细介绍了RAC的核心守护进程、共享组件如OCR和投票磁盘的管理、集群资源调度机制,并探讨了故障转移流程、性能优化策略及安全配置措施。通过全面的技术剖析,帮助读者构建高可用、高性能的数据库集群系统。 阅读详情

相关推荐

置信传播bp算法学习

供研究学习置信传播算法的学者学习,matlab代码,内含一些例子包括贝叶斯网络、马尔科夫模型、因子图算法等

MFC-窗口封装

        MFC对Window作了一层比较浅的封装,其创建过程基本与SDK差不多。它简化了窗口的注册,并将窗口过程与类关联起来;后者是比较重要的封装,它使消息能够分流给“类的窗口过程”,既而通过消息映射,才能到达各个处理函数。       使用传统的SDK来创建一个窗口有点繁琐,伪代码是这样的:       if (RegisterClass(…))    {  

colin 5832

消息传递算法 和积算法 因子图 matlab源码

通过构造因子图(Factor Graph)关于和积算法(Sum-Product Algorithm)的matlab源码,借此可实现消息传递算法(Message Propagation Algorithm,MPA)、LDPC编解码、卡尔曼滤波、隐性马尔可夫链(HMC)等应用

WINDOWS消息机制(五):消息推送

在上篇中,介绍了消息网络的整体布局,这篇要介绍的是,消息进来之后,如何顺着整个消息网络,找到自己对应的处理函数。 MFC 消息分类 1 命令消息(WM_COMMAND) 比如菜单项的选择,工具栏按钮点击等触发产生的消息。所有派生自CCmdTarget 的类都有能力接收WM_COMMA...

chitun9294的博客 556

消息传递算法(mp)的matlab代码

参照消息传递算法核心迭代公式,matlab书写的mp算法代码,在此基础之上,读者可以很容易得到该算法的一些改进算法的matlab代码

基于Playwright+Pytest+Yaml+Allure的UI自动化测试框架实战指南

本文详细介绍了基于Playwright+Pytest+Yaml+Allure的UI自动化测试框架实战指南,涵盖环境搭建、核心功能实现及高级技巧。通过数据驱动测试、页面操作封装和智能等待机制,提升测试效率与可维护性。Allure报告增强功能为团队提供直观的质量反馈,助力高效UI自动化测试。

weixin_28826521的博客 488

1.1 ROS2简介

此背景下,官方于2017正式推出了新一代机器人操作系统——ROS2,ROS2基于全新的设计框架,保留了ROS1的优点并改进其缺陷,ROS2的目标是适应新时代的新需求。的机器人公司发布了ROS,ROS集开源、免费、高复用、低耦合、工具丰富等等诸多优势于一身,一经推出便迅速吸引了大量的开发者、科研人员、硬件供应商的加入,形成了稳定且多样的机器人生态,水到渠成的ROS也成为了机器人领域的主流软件框架并流行至今。ROS发行版的目的是让开发人员可以在一个相对稳定的代码库上工作,直到新的发行版推出。

LSG_Dawn的博客 1722

深入解析EtherCAT通讯DS402协议下的伺服电机控制模式选择与配置

本文深入解析了EtherCAT通讯DS402协议下的伺服电机控制模式选择与配置,详细介绍了六种核心控制模式(如PPM、CSP、CSV、CST)的应用场景及实战技巧。通过EtherCAT和DS402协议的高效配合,实现工业自动化中伺服电机的精准控制,提升设备性能与稳定性。

h0i1j2k3l的博客 1174

weblogic11g查看mysql版本_迄今为止最全:Oracle WebLogic Server产品版本介绍

WebLogic Application Server版本及其发布时间:WebLogic Server 12c Release 3 (12.1.3) - June 26, 2014WebLogic Server 12c Release 2 (12.1.2) - July 11, 2013WebLogic Server 12c Release 1 (12.1.1) - Dec 1, 2011WebL...

weixin_29386469的博客 529

Vue中实现word文档渲染、在线编辑、保存

Vue3对word文档进行渲染、编辑、保存。word转成html,html转成word

h18749849699的博客 1328

NVIDIA平台Xavier/TX2板摄像头驱动开发与TP2850方案开发

本文介绍了在NVIDIA平台上开发Xavier/TX2板摄像头驱动的过程,并结合TP2850方案实现了多路模拟相机输入。我们提供了初始化摄像头和连接TP2850方案的示例代码,并介绍了相关的步骤和注意事项。需要注意的是,以上示例代码仅提供了基本的摄像头初始化和与TP2850通信的框架,你需要根据具体的需求进行进一步开发和配置。你可能需要参考摄像头和TP2850的数据手册以及相关的开发文档,以了解更多详细的配置和操作。此外,你还需要一个支持TP2850方案的硬件设备,并将其连接到Xavier/TX2板上。

PixelLancer的博客 592

.NET Framework各版本比较

转自 http://sd.youkuaiyun.com/a/20120502/2805240.html 导读:一直以来,众多学校教学以及公司开发环境所使用Visual Studio .NET Framework版本多不相同,本文作者比较了.NET Framework多个版本之间的区别,方便各位选择和切换.NET Framework。 版本号 发布日期 Visua

理性的幻想 877

YOLOV26详解 从原理到部署

计算机视觉领域最具影响力的目标检测框架迎来重大里程碑。2026年1月,Ultralytics 正式发布 YOLOv26——这不是一次简单的版本迭代,而是一场面向边缘计算时代的架构重构。本专栏基于 Ultralytics 官方技术白皮书、YOLO Vision 2025 大会首发内容及国际前沿研究成果,系统拆解 YOLOv26 从算法原理到工程落地的全栈技术体系。与常规教程不同,我们聚焦与,帮助你在端侧 AI 部署的实战中掌握核心竞争力。

u012133341的博客 2019

iOS学习篇章1--Objective-C基础语法

1、Objective-C 定义:OC是以SmallTalk为基础,建立在C语言之上,是C语言的超集。 2、使用:2007年苹果公司发布了OC 2.0,并在iPhone上使用OC进行开发。 3、编译环境:Xcode 4、框架:OC编程中主要用到的框架是Cocoa,它是MacOS X中五大API之一,它由两个不同的框架组成FoundationKit 和Applicati

奇迹的天堂 734

《手把手教你玩转RTOS操作系统》专栏简介

《手把手教你玩转RTOS操作系统》专栏系统讲解实时操作系统开发,以FreeRTOS为主线,结合RT-Thread和Zephyr对比分析。内容涵盖RTOS基础、任务管理、通信机制、中断处理等核心知识,并配套STM32/ESP32平台实战项目。专栏特色在于零基础友好、实战驱动、多系统对比和行业趋势分析,适合嵌入式开发者进阶RTOS开发能力,解决实际项目中的选型与优化问题。通过完整学习路径,读者可掌握构建高可靠性嵌入式系统的关键技能。

MHD0815的博客 530

【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(二) - 网络规划

2. 全三层架构设计思路 采用全三层网络架构设计的出发点是: 使用尽量少的交换机高级功能,可以尽可能减少由于功能bug故障造成的问题; 使用尽量少的网络协议,以兼容不通厂商的网络设备 实现简单,易于维护,绝对可靠的路由协议; 通过控制路由来调度流量,尽量减少设备或协议的故障域; 牺牲高级功能带来的便捷,得到更高的可用性和性能; 由上述原则,本文的设计选择只使用静态路由和BGP...

因吹斯汀 1万+

【转】.NET Framework各版本比较

版本号 发布日期 Visual Studio的版本 Windows上的默认情况 CLR版本 发行版的特点 1.0 2002年2月13日 Visual Studio .NET NA 1.0 CLR和基类库的第一个版本 1.1 2003年4月24日 Visual Studio 2003 Windows Server 2003

非著名码农的专栏 1199

YOLO11,ultralytics-main源代码目录结构详解

本文详细介绍了YOLO11框架的ultralytics-main源代码目录结构,帮助用户更好地理解和使用YOLO模型。主要目录包括:docker文件夹,包含多种Docker镜像文件,适用于不同硬件环境;docs文件夹,存放YOLO的说明文档;examples文件夹,提供YOLO使用的示例代码;tests文件夹,包含单元测试模块;ultralytics文件夹,为核心代码所在,包含推理逻辑、配置、数据处理等模块。其中,engine文件夹负责训练和推理引擎,models文件夹存放模型架构,nn定义神经网络结构

qq_30279827的博客 1282

NET_Framework各版本区别

版本号 发布日期 Visual Studio的版本 Windows上的默认情况 CLR版本 发行版的特点 1.0 2002年2月13日 Visual Studio .NET NA 1.0 CLR和基类库的第一个版本 1.1 2003年4月24日

conganguo的专栏 812

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

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

消息在网络中的传输过程

PC-A向PC-B传输消息,首先是用户打开消息应用例如QQ,然后给小黑发消息(你吃了吗), 1)在应用层生成数据”你吃了吗(小黑IP)“,然后数据传入表示层节点-表示层, 2)在表示层将数据进行转换(针对计算机系统编码如IBM主机使用EBCDIC编码,而大部分PC机使用的是ASCII码等等的不同)加密,压缩-会话层 3)在会话层将这个qq消息的回话区分出来,然后将会话内容以及相关信息传到下一...

weixin_34318956的博客 1361

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

MFC的来龙去脉-----消息处理,找处理函数

一、处理函数的源头   对于对话框程序,(无论是模式还是非模式),在注册窗口的时候,会指定其窗口过程处理函数WinProc;当消息找到了对应的窗口,DispatchMessage便开始让内核user32.dll执行WinProc,它负责调用真正的消息处理函数; if (pState->m_msgCur.message != WM_KICKIDLE && !AfxPreTranslateMe

anribras的专栏 847
上一篇: MDI,SDI创建过程中的一点不同--发布日期:2007-8-31
下一篇: float ToolBar && dock ToolBar--发布日期:2007-9-1
ToCpp
博客等级 码龄20年 48粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值