一:消息
1.什么是消息?

消息是驱动windows系统运行的基础。从计算机的角度来看,消息就是一个整数。
(1)一个无符号整数,是消息值;
(2)消息附带的WPARAM和LPARAM类型的参数;
(3)其实我们一般所说的消息是狭义上的消息值,也就是一个无符号整数,经常被定义为宏。

2.消息映射机制:

MFC使用消息映射机制来处理消息,在程序框架中的表现就是,在程序中有一个消息与消息处理函数组成的消息映射,每条消息都有与之相对应的消息处理函数。当窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理。SDK编程时需要在窗口过程中一一判断消息值进行相应的处理,相比之下MFC的消息映射机制要方便好用的多。

3.消息分类:

分为两大类,系统消息和自定义消息。其中系统消息又分为三种。
(1)标准Windows消息。除WM_COMMAND外以WM_开头的消息是标准消息
(2)命令消息。消息名为WM_COMMAND,消息中附带了产生消息的控件ID,即在消息参数中有相关的按钮等控件ID。
(3)通知消息。通知消息一般由列表框等子窗口发送给父窗口,消息名也是WM_COMMAND,其中在消息中附带了控件通知码来区分控件

4.CWnd的派生类都可以接收到标准Windows消息、通知消息和命令消息。命令消息还可以由文档类等接收。

5.用户自定义消息实际上就是用户定义一个宏作为消息,此宏的值应该大于等于WM_USER,然后此宏就可以跟系统消息一样使用,窗口类中可以定义它的处理函数。

6.WM_NOTIFY消息:
在操作列表框等控件时往往会给父窗口发送WM_NOTIFY通知消息。WM_NOTIFY消息的wParam参数为发送通知消息的控件的ID,lParam参数指向一个结构体,可能是NMHDR结构体,也可能是第一个元素为NMHDR结构体变量的其他结构体。NMHDR结构体的定义如下(仅作了解):

Typedef sturct tagNMHDR{HWND hwndFrom;UINT idFrom;UINT code;
} NMHDR;

hwndFrom为发送通知消息控件的句柄,idFrom为控件ID,code为要处理的通知消息的通知码,例如NM_CLICK。

7.通知消息:
通知消息的消息映射入口项形式如:ON_NOTIFY(wNotifyCode,id,memberFxn)
wNotifyCode为要处理的通知消息通知码,例如:NM_CLICK。id为控件标识ID。MemberFxn为此消息的处理函数。
通知消息的处理函数的原型为:

afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result);

8.用户自定义消息:
(1)首先要定义消息宏,如:
#define WM_UPDATE_WND (WM_USER+1)
(2)再到消息映射表中添加消息映射入口项:
ON_MESSAGE(WM_UPDATE_WND, &CMainFrame::OnUpdateWnd)
(3)然后在MainFrm.h中添加消息处理函数的函数声明:
afx_msg LRESULT OnUpdateWnd(WPARAM wParam, LPARAM lParam);
(4)最后在MainFrm.cpp中实现此函数。

9.我们自定义的类要想响应自定义消息就只能从CWnd中派生

10.自定义类相应自定义消息:

(1)自定义类要继承与CWnd类
(2)在处理消息之前要确保m_hWnd关联到一个窗体,即便这个窗体是不可见的。
那么有人说,在自定义类的构造函数中调用Create函数就行了,不错,当然也可以在别处调用,只要确保在消息发送之前。但是,Create的调用很有说法,要注意两个地方,第一个参数是类的名称,我建议最好设为NULL;第五个参数是父窗体对象的指针,这个函数指定的对象一定要存在,我建议最好为整个程序的主窗体。。如下是我的自定义类的构造函数:
CMyTestObject::CMyTestObject() {
   CWnd::Create(NULL,"MyTestObject",WS_CHILD,CRect(0,0,0,0),::AfxGetMainWnd(),1234);
} //一定要在生成主窗体后使用,在主窗体完成OnCreate消息的处理后
CMyTestObject::CMyTestObject(CWnd*pParent) {
   CWnd::Create(NULL,"MyTestObject",WS_CHILD,CRect(0,0,0,0),pParent,1234);
}

二:属性页
1.属性页对话框主要用到两个类:CPropertyPage类和CPropertySheet

2.CPropertyPage三个构造函数:
CPropertyPage( );//无参构造函数
explicit CPropertyPage(
UINT nIDTemplate,//属性页ID
UINT nIDCaption = 0,//数nIDCaption是属性页对话框选项卡的标题所用字符串资源的ID,若设为0,则选项卡标题就使用 该属性页的对话框资源的标题
DWORD dwSize = sizeof(PROPSHEETPAGE)
);
explicit CPropertyPage(
LPCTSTR lpszTemplateName,//属性页的对话框资源的名称字符串,不能为NULL(?)
UINT nIDCaption = 0,
DWORD dwSize = sizeof(PROPSHEETPAGE)
);

3.CancelToClose()函数:在模态属性页对话框的属性页进行了某不可恢复的操作后,使用CancelToClose()函数将“OK”按钮改为“Close”按钮,并禁用“Cancel”按钮。函数原型为:void CancelToClose( )

MFC知识点和常用类控件的使用相关推荐

  1. QT 基础知识一(QT安装、创建项目、常用窗口控件使用、信号与槽机制讲解)

    QT概念 Qt:Qt是一个跨平台的C++框架(C++库),Qt除了支持界面设计(GUI编程),还封装了与网络编程.多线程.数据库连接.视频音频等相关的功能. ctrl 撤销(返回上一步) 市面常见的G ...

  2. MFC之使用 Windows 标准控件

    使用 Windows 标准控件 为了提高常用代码的复用性,VC 使用控件将常用的诸如用户输入.操作数据等功能封装起来.控件通常放在对话框或工具栏中,分为 3 种:Windows 标准控件.Active ...

  3. JTable是Swing编程中很常用的控件

    JTable是Swing编程中很常用的控件,这里总结了一些常用方法以备查阅. 一.创建表格控件的各种方式: 1) 调用无参构造函数. JTable table = new JTable(); 2) 以 ...

  4. 八、pyqt5按钮类控件——QPushButton、QRadioButton、QCheckBox

    pyqt5中常用的按钮类控件有QPushButton.QRadioButton.QCheckBox.QToolButton等.这些按钮类的基类都是QAbstracButton类.所以这些类有部分方法是 ...

  5. 安卓入门系列-07常用UI控件(长文)

    常用UI控件 简介 这一篇介绍开发中的常用UI控件. 布局管理器 所有布局管理器都是ViewGroup的子类,都可作为容器类使用.继承自View,所以也可嵌套. 常见的布局之前已经提到了三种,这里不再 ...

  6. 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转)

    用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转) 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://hcq11.blogbus.com/logs/5 ...

  7. 07.移动先行之谁主沉浮----控件之轮流轰炸——布局类控件

    如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点) 移动先行之谁主沉浮? 带着你的Net飞奔吧! 链接======>(点) 一.布局类控件 Grid.StackPanel. ...

  8. MFC中使用TAB Control控件

    2019独角兽企业重金招聘Python工程师标准>>> MFC中使用TAB Control控件 MFC中使用TAB Control控件(转) 假如我现在有个SDI程序,View是Fo ...

  9. C#:C#控件系列四(列表类控件)

    列表类控件 1. ListBox 控件: ListBox控件又称列表框,它在工具箱中的图标为,它显示一个项目列表供用户选择. 在列表框中,用户一次可以选择一项,也可以选择多项. 1.1. 常用属性: ...

最新文章

  1. [转]json2.js 源码解读
  2. Spring Security——根据请求Header[Accept]不同返回不同类型资源解决方案
  3. C++ Boost库简介
  4. java设计按月每天签到_java实现app签到功能
  5. 提问:访问服务器时提示system.componentmodel.win32exception: 拒绝访问
  6. react 子传参父_React 子组件向父组件传值的方法
  7. linux内存管理详解,Linux内存管理图文讲解.pdf
  8. 离散数学与计算机选择题,《离散数学》期终试题计算机系.doc
  9. 几何常用算法与判断线段相交【转】
  10. mysql新浪微盘_Android62期视频教程全集下载
  11. 2019ICPC亚洲区域赛日程与2019CCPC比赛日程
  12. 在cmd命令行运行一个python脚本
  13. cad10版计算机快键在哪,CAD快捷键大全在哪里看?CAD快捷键大全与CAD技巧汇总
  14. 计算机组成x什么意思,cpu后面带x是什么意思
  15. Unity机器学习库ml-agents新版本的环境搭建
  16. 前端面试系列-JavaScript作用域和作用域链
  17. NUST 2009-8
  18. LVGL笔记(1)-使用《avilib》库播放avi视频(lvgl在windows模拟运行)
  19. 马士兵 oracle seton,马士兵Oracle 下
  20. 微信小程序模仿微信主页及页面跳转详解

热门文章

  1. 基于PLC的智能农业温室大棚控制系统设计大棚电气控制组态 温室大棚组态 温室组态
  2. 2021年选择老域名的2点好处和购买老域名的4点技巧
  3. 水文分析--arcgis水文分析模块
  4. integral_constant定义编译期常量
  5. 如何用python实现自动化办公_Python自动化办公都需要掌握什么知识?
  6. python学习笔记_第21天(文件操作--IO 技术)
  7. JAVA实现求和与求平均值运算
  8. 《剑指offer 阅读笔记一》程序员面试流程,面试游刃有余
  9. SQL Server如何在日期里提取年份和月份
  10. 【红外技术】红外热成像在雨雾天的能看多远?