Windows消息分类

  Windows消息分为系统消息和用户自定义消息。Windows系统消息有三种:

1.标准Windows消息。除WM_COMMAND外以WM_开头的消息是标准消息。例如,WM_CREATE、WM_CLOSE。

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

2.命令消息。消息名为WM_COMMAND,消息中附带了标识符ID来区分是来自哪个菜单、工具栏按钮或加速键的消息。

3.通知消息。通知消息一般由列表框等子窗口发送给父窗口,消息名也是WM_COMMAND,其中附带了控件通知码来区分控件。

消息映射表

除了一些没有基类的类或CObject的直接派生类外,其他的类都可以自动生成消息映射表。下面的讲解都以前面例程HelloWorld的CMainFrame为例。消息映射表如下:

C++代码
  1. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
  2. ON_WM_CREATE()
  3. ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)
  4. ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew)
  5. ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnApplicationLook)
  6. ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnUpdateApplicationLook)
  7. ON_WM_SETTINGCHANGE()
  8. END_MESSAGE_MAP()

在BEGIN_MESSAG_MAP和END_MESSAGE_MAP之间的内容成为消息映射入口项。消息映射除了在CMainFrame的实现文件中添加消息映射表外,在类的定义文件MainFrm.h中还会添加一个宏调用:

DECLARE_MESSAGE_MAP()

一般这个宏调用写在类定义的结尾处。

添加消息处理函数   

  1.在类定义中加入消息处理函数的函数声明,注意要以afx_msg打头。例如MainFrm.h中WM_CREATE的消息处理函数的函数声明:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);。

2.在类的消息映射表中添加该消息的消息映射入口项。例如WM_CREATE的消息映射入口项:ON_WM_CREATE()。

3.在类实现中添加消息处理函数的函数实现。例如,MainFrm.cpp中WM_CREATE的消息处理函数的实现:

最新文章

  1. 小菜学习设计模式(四)—原型(Prototype)模式
  2. Alpha阶段第六次Scrum Meeting
  3. Java学习笔记 03 数组
  4. Lua协程
  5. swift 如何删除subviews
  6. php基础10:字符串中插入变量
  7. PostgreSQL Replication之第十二章 与Postgres-XC一起工作(7)
  8. windows批处理(cmd/bat)编程详解
  9. 深入Mysql 导入导出
  10. request对象实现请求转发
  11. UITableViewcell autolayout下动态高度
  12. A - Til the Cows Come Home
  13. python3连接mysql
  14. Apache JMeter - load test tool
  15. Atitit..文件上传组件选择and最佳实践的总结(2)----HTTP
  16. ionic中应用sass
  17. 【NOIP2012提高组】借教室
  18. 『sumdiv 数学推导 分治』
  19. Linux内核入门到放弃-页缓存和块缓存-《深入Linux内核架构》笔记
  20. 源码来袭:call、apply手写实现与应用

热门文章

  1. ajax请求状态码为0的解决办法
  2. 工作中常用到的sql命令!!!
  3. python groupby的小技巧
  4. 3d Max 2018安装失败怎样卸载3dsmax?错误提示某些产品无法安装
  5. C# a == b ? c :d 表示的意思
  6. UGUI EventSystem.current.IsPointerOverGameObject(),判断是否进入了UI上
  7. webkit技术--网页渲染原理
  8. HDU 4342——History repeat itself——————【数学规律】
  9. 存储过程 返回值 procedure return values
  10. hdu 4276 树形m时间1进n出