`

[vc++][消息]C++中消息的种类

    博客分类:
  • C++
 
阅读更多
3.4 三种类型的消息
在MFC应用程序中传输的消息有三种类型:窗口消息、命令消息和控件通知。
3.4.1 窗口消息
窗口消息(Window Message)一般与窗口的内部运作有关,如创建窗口、绘制窗口和销毁窗
口等。通常,消息是从系统发送到窗口,或从窗口发送到窗口。
当用SendMessage()或PostMessage()发送一个窗口消息时,变量Message、wParam和
lParam的格式如下:
Message wParam lParam
WM_XXX 定义的命令 定义的命令

WMXXX可以是许多窗口消息之一,如下列窗口:
■ WM_CREATE,告诉窗口初始化自己。
■ WM_PAINT,告诉窗口绘制自己。
■ WM_MOUSEMOVE,告诉窗口鼠标移经它。
有关某些公共窗口消息,参见附录B。若需要窗口消息的完全的列表,请参考M F C文档。
3.4.2 命令消息
命令消息一般与处理用户请求相关,当用户单击一个菜单项或工具栏时,命令消息产生,
并被发送到能处理该请求的类对象(如,装载文件、编辑文本和保存选项等)。
当用SendMessage( )或PostMessage( )发送窗口消息时,变量Message、wParam和lParam的
格式如下:
Message wParam lParam
WM_COMMAND 0 Command ID 0
Command ID要么是选中菜单项的I D,要么是被单击的工具栏按钮。注意Command ID不
能大于一个字长,如果使它大于一个字长,系统就只用0来填充高位字。某些控件通知也用
WM_COMMAND消息,区别两种消息的唯一方法是lParam是否为N U L L。
3.4.3 控件通知
通常,控件通知在某些重要事件发生时,由控件窗口发送到父窗口,如打开一个组合框。
控件通知为父窗口进一步控制子窗口提供了机会。例如,打开一个组合框时,父窗口可以用
组合框初建时得不到的消息填充它。
控件通知经历了一个演变过程,因而SendMessage( )的变量Message、wParam和lParam有
三种格式。
1. 第一控件通知格式
第一控件通知格式只是窗口消息的子集。
Message wParam lParam
WM_XXX 定义的命令 定义的命令
WM_XXX可以是下面消息中的任何一种:
■ WM_PARENTNOTIFY表示一个控件窗口要么已被建立或销毁,要么鼠标已单击了该窗口。
■ WM_CTLCOLOR、WM_DRAWITEM、WM_MEASUREITEM、WM_DELETEITEM、WM_CHARTOITEM、WM_VKEYTOITEM或WM_COMPAREITEM都是送往父窗口的消息,用来绘制自身的控件窗口。
■ WM_HSCROLL或WM_VSCROLL由滚动条控件发送,通知父窗口滚动窗口。
2. 第二控件通知格式
第二控件通知格式使用WM_COMMAND消息,与命令消息共享。
Message wParam lParam
WM_COMMAND XN_XXX 控件ID 窗口句柄
lParam变量用来区分是命令消息还是控件通知。控件通知在lParam中有一个有定义的句柄,用来标识发出通知的控件;而命令消息中lPram为N U L L。XN_XXX值因发出通知的控件不同而不同,例如,XN_XXX值为EN_CHANGE,告诉父窗口显示在编辑框控件中的文本已发生变化。还有其他一些例子列在附录B中。
3. 第三控件通知格式
第三控件通知格式也是最灵活的通知格式,它用W M N O T I F Y消息。
Message wParam lParam
WM_NOTIFY 控件ID 指向NMHDR的指针
lParam值指向一个结构,该结构包括有关制作该通知的控件的任何内容,而不受空间和类型的限制,该结构叫做NMHDR。
typedef struct tagNMHDR {
HWND hwndFrom; // Window handle of Control Window
// making the notification.
UINT idFrom; // Control ID of Control Window
// making the notification.
UINT code; // notification code ex: the user
// has clicked the Control Window
} NMHDR;
NMHDR代表通知消息头(Notification Message Header)。为什么要这个头?因为某些控件用NMHDR作为头发送一个更大结构的消息,即使那些不知道更大结构内容的函数还是能处理通知头。
分享到:
评论

相关推荐

    VC++之MFC类库中文手册 完整chm版

    类库概述概述部分描述了Microsoft基本类库(MFC)类并对其按种类分类。 该MFC参考含盖了Microsoft基本类库中的类、全局函数、全局变量和宏的内容。 参考中“类层次结构图”是为了方便查找某个类的基类。 该MFC参考...

    《VC++图像处理程序设计》小波变换C++程序

    在VC++中实现小波变换,通常会使用如Wavelet Toolbox、libwavelet等库,它们提供了丰富的函数来执行不同种类的小波变换。程序设计包括以下几个步骤: 1. 读取图像:使用OpenCV等库读取图像数据。 2. 小波分解:根据...

    VC++范例大全 源代码

    《VC++范例大全 源代码》是一个包含大量Visual C++编程实例的资源集合,旨在帮助开发者深入理解和掌握VC++编程技术。这个压缩包文件提供了丰富的源代码,覆盖了从基础到高级的各种主题,是学习和提升VC++编程技能的...

    VC++之MFC类库中文手册

    通过这个"VC++之MFC类库中文手册",开发者可以快速了解并掌握MFC的各种类和函数,解决实际编程中的问题。手册可能涵盖以下内容:MFC的基本概念、类库结构、如何创建MFC应用、消息处理、控件使用、数据库操作、网络...

    利用vc++中.rc2文件分类管理资源

    `.rc2`文件就是在这样的背景下引入的,它是Visual C++中的资源脚本文件,用于分类管理各种资源。 `.rc2`文件的使用可以显著提高资源管理的效率。一个`.rc`文件通常是主资源脚本,而`.rc2`文件则可以视为辅助资源...

    VC++中应用OpenCV教程

    2. **消息映射**:在MFC的`.h`和`.cpp`文件中定义消息映射,处理如按钮点击、文件选择等事件,触发图像处理操作。 3. **界面交互**:通过MFC控件(如按钮、对话框)与用户进行交互,获取输入参数或显示结果。 **五...

    人体跟踪c++实例(VC++实现)

    在本文中,我们将深入探讨“人体跟踪C++实例(VC++实现)”的相关知识点。这个项目是基于C++编程语言,并且使用Visual C++ (VC++)作为集成开发环境,旨在实现对人体运动的实时检测和跟踪。以下是一些关键知识点: 1. ...

    利用vc++6.0提取图像中的文字.zip

    1. **安装OpenCV**:首先,你需要下载并安装OpenCV库,将其头文件和库文件添加到VC++ 6.0的工程设置中。 2. **图像读取和显示**:使用`cv::imread()`函数读取图像,`cv::imshow()`函数显示图像。 3. **预处理**:...

    vc++ 范例宝典 源码

    在这个压缩包中,我们重点关注的是"02"这个子文件夹,这很可能是按照章节或者主题进行的分类。尽管没有具体的文件名称,我们可以推测这个子文件夹可能包含了第二部分或第二个主题的源码示例。 VC++,全称Visual C++...

    SAR影像处理(VC++)

    3. VC++在SAR影像处理中的应用:VC++是微软开发的一款强大的C++集成开发环境,支持MFC(Microsoft Foundation Classes)库,方便构建用户界面和系统级应用程序。在SAR影像处理中,开发者可以利用VC++的强大性能编写...

    基于vc++的分类程序

    在IT领域,尤其是在软件开发中,VC++(Visual C++)是一种广泛使用的集成开发环境(IDE),由微软公司提供,用于编写C++语言的应用程序。本项目“基于vc++的分类程序”是一个利用C++编程语言实现的分类算法示例,它...

    疲劳检测vc++和opencv编程源代码

    在VC++环境中,开发者需要编写代码来整合OpenCV库,设置摄像头输入,调用级联分类器进行对象检测,处理检测结果,以及根据疲劳指标触发警报系统。VC++作为Microsoft开发的C++集成开发环境,提供了友好的界面和丰富的...

    C++到VC++实例100.rar

    标题中的"C++到VC++实例100.rar"是一个压缩包文件,暗示了这是一个关于C++编程语言的学习资源,特别是侧重于使用Visual C++(VC++)开发环境的实践案例。VC++是Microsoft公司开发的一个集成开发环境,主要用于编写...

    vc++6.0语言函数查询

    VC++6.0是微软公司开发的一款经典集成开发环境(IDE),它主要用于编写使用Microsoft Visual C++编译器的C++程序。这款IDE以其强大的功能和友好的用户界面在程序员中广受欢迎,尤其对于初学者来说,它是学习C++的一...

    VC++ 跳过MFC框架 处理键盘设备消息 例程(vS2010)

    `resource.h`包含了对话框资源的定义,`KeyCatchJ.vcxproj.filters`则是Visual Studio项目文件的一部分,用于指定项目中的文件分类。`KeyCatchJDlg.h`和`KeyCatchJ.h`则包含了类的定义,而`targetver.h`可能包含了...

    vc++课程设计论文

    VC++课程设计论文主要涉及了MFC(Microsoft Foundation Classes)应用程序设计中的消息处理机制和消息映射机制。MFC是一个C++库,它为开发Windows应用程序提供了一种面向对象的方法。 1. **消息处理机制**:Windows...

    VC++ 6.0 msdn中文版

    在VC++ 6.0时代,MSDN 中文版帮助无数开发者快速熟悉了Windows API、MFC(Microsoft Foundation Classes)和其他C++编程概念。 **MFC 函数库手册** MFC是微软提供的一个C++类库,它封装了Windows API,使得开发者...

    VC++数字图像处理源码(杨淑莹)

    在IT领域,尤其是在计算机视觉和图像处理方面,VC++(Visual C++)是一种常见的编程工具,因其高效性和灵活性而被广泛使用。杨淑莹老师的"VC++数字图像处理源码"提供了一系列的示例程序,涵盖了图像处理的核心概念和...

    图像模式识别vc++实现

    VC++作为C++的一个强大开发环境,提供了丰富的库和工具支持这类复杂的计算任务。 1. **特征提取**:这是模式识别的第一步,目的是从原始图像中抽取具有代表性的特征。常见的特征有边缘、角点、色彩直方图、纹理、...

    VC++开发的完整仓库管理系统源码

    VC++,全称Microsoft Visual C++,是微软公司推出的面向对象的C++集成开发环境,拥有强大的图形用户界面(GUI)开发能力,是构建Windows应用程序的理想选择。而SQL SERVER作为后端数据库,以其高效稳定的数据处理...

Global site tag (gtag.js) - Google Analytics