MFC常见一些知识点

1.DDX_Control 与 DDX_Text 区别

DDX_TEXT()的作用可以理解为把字符串变量和控件的文本(WindowText)关联起来, 
DDX_Control()
的作用可以理解为把变量和控件本身关联起来, 
DoDataExchange(pDX)
就是处理所有变量与其关联控件交换数据的函数。

void CView::DoDataExchange(CDataExchange* pDX)

CFormView::DoDataExchange(pDX);
DDX_Text(pDX, IDC_ID_VALUE, m_strID);
DDX_Control(pDX, IDC_ID_VALUE, m_editID);

在程序中
通过update(TRUE)取得控件上的值到m_strID,处理修改后通过update(FALSE)传回控件,界面显示
通过m_editID.GetWindText(str),取得值,处理后,通过m_editID.SetWindText(str)传回控件界面显示

2.MFC BEGIN_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CpassApp, CWinApp)
    ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()

这些都是宏定义,不是函数。 
在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之间添加你的消息响应函数,为每个消息处理函数加入一个入口

BEGIN_MESSAGE_MAP( theClass, baseClass )

参数:

theClass 指定消息映射所属的类的名字。
baseClass 指定theClass的基类的名字。

说明:
使用BEGIN_MESSAGE_MAP宏开始你的消息映射的定义。
在你的类的成员函数的实现文件(.CPP)中,使用BEGIN_MESSAGE_MAP宏开始消息映射,然后为每个消息处理函数加入一个入口,最后用END_MESSAGE_MAP宏结束消息映射。

每个消息映射入口的格式如下:
  ON_Notification(id, memberFxn)
  其中id指定了发送通知的控件的子窗口的ID,而memberFxn指定了处理该通知的父对象中的成员函数名。
  父对象的函数原型格式如下:
  afx_msg void memberFxn( );

  可能的消息映射入口如下:

映射入口 何时向父对象发送消息
ON_BN_CLICKED   用户单击按钮时
ON_BN_DOUBLECLICKED 用户双击按钮时

3.ON_COMMAND和ON_MESSAGE的区别

在MFC应用程序中传输的消息有三种类型:窗口消息、命令消息和控件通知。

窗口消息(Window Message)

一般与窗口的内部运作有关,如创建窗口、绘制窗口和销毁窗口等。通常,消息是从系统发送到窗口,或从窗口发送到窗口。若需要窗口消息的完全的列表,请参考MFC文档。

命令消息

命令消息一般与处理用户请求相关,当用户单击一个菜单项或工具栏时,命令消息产生,并被发送到能处理该请求的类对象(如,装载文件、编辑文本和保存选项等)。

控件通知

通常,控件通知在某些重要事件发生时,由控件窗口发送到父窗口,如打开一个组合框。控件通知为父窗口进一步控制子窗口提供了机会。例如,打开一个组合框时,父窗口可以用组合框初建时得不到的消息填充它。

ON_COMMAND 和ON_MESSAGE都是将消息处理函数加入消息路由表中,但是ON_COMMAND对应的消息ID一直都是WM_COMMAND,而ON_MESSAGE的消息ID为ON_COMMAND的第一个参数

在MFC中,ON_COMMAND, ON_MESSAGE, ON_NOTIFY它们的区别。

ON_NOTIFY是控件向其父窗口发送消息处理的宏,ON_COMMAND是菜单和工具栏项处理消息的宏,ON_MESSAGE是处理自定义消息的宏

ON_COMMAND用来处理WM_COMMAND消息。老式的windows控件发送WM_COMMAND作为对父窗口的通知消息。另外,菜单,工具栏也向框架窗口发送WM_COMMAND消息。

ON_MESSAGE主要用来处理用户自定义消息。

对于某些新型的windows控件(如ListCtrl等),向父窗口发送通知消息时需要包含大量的信息,WM_COMMAND已不适应这种要求(因为WM_COMMAND的wparam和lparam都已经填满了),ON_NOTIFY主要用来处理这些新型的windows控件向父窗口的发送的WM_NOTIFY通知消息。

时间: 2024-11-19 01:08:53

MFC常见一些知识点的相关文章

http常见基础知识点

引言:作为web开发人员,吃透http是很有必要的,下面是我对http协议的基本常用知识点总结. http简介 简单来说,http(HyperText Transfer Protocol,超文本传输)协议就是用于客户端和服务器端之间的通信协议. 用送信来类比,客户端就是写信人,服务器端是收信人,而http协议就是邮寄规则,他保障你写的信能被收到. HTTP协议工作于客户端-服务端架构为上.浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求.Web服务器根据接收到的请求后

细说php一些常见的知识点

一.认识脚本语言 1.常见的脚本语言有:html,css,js,asp,Python等 2.脚本语言的特性: a.语法和机构通常比较简单 b.学习和使用通常比较简单 c.通常以容易修改程序的“解释”作为运行的方式,而不需要”编译“ d.程序的开发产能优于运行效能 3.统一资源定位符URL格式:http://<ip地址>/[端口号]/[路径]/[?<查询信息>] 如果是默认端口80可省略,其他端口则必须在URL中指定 二.动态网站开发所需的web构件 1.客户端IE/Firefox/

MFC常见错误提示:opened in another editor

有时候在使用MFC的过程中常常会遇到这种提示.假设你在看想必你也遇到这种烦恼. 没办法-- 把打开的文件所有关闭.然后你就发现期待的RC文件出现了! .!!!.!!!!!!! ! !.! !! .

操作系统常见面试知识点

1.请分别简单说一说进程和线程以及它们的区别. 进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位. 线程是进程的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位. 一个进程可以有多个线程,多个线程也可以并发执行 2.线程同步的方式有哪些 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限.因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问. 信号量:它允许同一时刻多个线程访问同一资源,但

Java集合类常见面试知识点总结

Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾. 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java核心技术? https://blog.csdn.net/column/details/21930.html 里面有包括Java集合类在内的众多Java核心技术系列文章. 以下总结不保证全对,如有错误,还望能够指出,谢谢. 最后,如果想要更好地完成这部分内容的学习,建议大家还是去看一下原文. Colletion,iterator,comparable 一般认为Co

设计模式常见面试知识点总结(Java版)

设计模式 这篇总结主要是基于我设计模式系列的文章而形成的的.主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点.谢谢 更多详细内容可以到我的cdsn博客上查看: https://blog.csdn.net/a724888 最后,如果想要更好地完成这部分内容的学习,建议大家还是去看一下原文. 创建型模式 创建型模式 创建型模式的作用就是创建对象,说到创建一个对象,最熟悉的就是 new 一个对象,然后 set 相关属性.但是,在很多场景下,我们需要给客户端提供更加友好的创建对象

设计模式常见面试知识点总结

设计模式 这篇总结主要是基于我设计模式系列的文章而形成的的.主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点.谢谢 更多详细内容可以到我的cdsn博客上查看: https://blog.csdn.net/a724888 最后,如果想要更好地完成这部分内容的学习,建议大家还是去看一下原文. 创建型模式 创建型模式 创建型模式的作用就是创建对象,说到创建一个对象,最熟悉的就是 new 一个对象,然后 set 相关属性.但是,在很多场景下,我们需要给客户端提供更加友好的创建对象

常见样式知识点

es6: <script type="text/ecmascript-6"> stylus: <style scoped lang="stylus" rel="stylesheet/stylus" > var $ss=$("#t-tbody").find("input[disabled][checked]").length; //[disabled]且checked时的状态 //单选

Java常见小知识点(持续更新...)

1.在什么场景下需要重写hashcode?HashMap的实现原理? 如果我们对equals()方法进行了重写,一般对hashcode进行重写,保证相同的对象返回相同的hash值 HashMap实际上是一个"链表散列"的数据结构,即数组和链表的组合 当我们向HashMap中put值的时候,先计算key的hash值,再根据hash值来计算出这个key在数组中的下标(通过hash与数组长度-1的位与运算,也正是因此,map长度都是2的次方,因为要保证length-1  都是 )如果数组该位