Win32到MFC的消息影射机制---MFC深入浅出
来源:互联网 发布:个人销售网站源码 编辑:程序博客网 时间:2024/05/05 18:26
1. Message Map
1) 建立消息结构
struct MSGMAP_ENTRY{
UINT nMessage;
LONG (*pfn)(HWND, UINT, WPARAM, LPARAM);
};
#define dim(x) (sizeof(x) / sizeof(x[0]))
注意:pfn是一个函数指针;
在这里我们把数据和处理数据的方法封装到一起;
2) 建立消息影射数组
// 消息与处理例程的对照表格
struct MSGMAP_ENTRY _messageEntries[] = {
WM_CREATE, OnCreate,
WM_PAINT, OnPaint,
WM_SIZE, OnSize,
WM_COMMAND, OnCommand,
.......
};
// Command-ID与处理例程对照表格
struct MSGMAPENTRY _commandEntries[] = {
IDM_ABOUT, OnAbout,
IDM_SAVES, OnSaves,
......
}
// 窗口函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
for(int i = 0;i<dim(_messageEntries);i++)
{
if(LOWORD(message) == _messageEntries[i].nMessage)
return (*_messageEntries[i].pfn)(hWnd, message, wParam, lParam);
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
// OnCommand处理---专门处理WM_COMMAND
LONG OnCommand(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
for(int i = 0;i<dim(_commandEntries);i++)
{
if(LOWORD(message) == _commandEntries[i].nMessage)
return (*_command[i].pfn)(hWnd, message, wParam, lParam);
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
LONG OnCreate(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
}
... ...
这么一来WndProc和OnCommand永远不必改变,每当有新的要处理的消息时,只要在_messageEntries和_commandEntries两个数组中加上新的元素,并针对新的消息添加消息处理例程即可。
这种观念及做法就是MFC中Message Map的雏形。
- Win32到MFC的消息影射机制---MFC深入浅出
- 深入浅出MFC:MFC的消息机制
- MFC的消息机制
- MFC的消息机制
- MFC 的消息机制
- MFC的消息机制
- MFC的消息机制
- MFC的消息机制
- mfc的消息机制
- MFC的消息机制
- MFC的消息机制
- MFC的消息机制
- 读《深入浅出MFC》笔记——关于MM_ANISOTROPIC影射模式
- Win32中窗口的创建和消息机制以及MFC对Win32的封装简介
- Win32中窗口的创建和消息机制以及MFC对Win32的封装简介
- 深入浅出Win32多线程设计之MFC的多线程-线程与消息队列(经典)
- MFC深入浅出--消息映射
- MFC深入浅出--消息映射
- 给关心奥运的程序员们推荐一个奥运新闻网站
- 山顶洞人出洞
- 开始研究irrlicht
- 面向接口编程 (转载)
- 使用猴子测试工具(1)
- Win32到MFC的消息影射机制---MFC深入浅出
- 转载Using Eclipse Efficiently(by Derek Young)
- xml格式的log4j配置文件概述
- Windows线程函数概述 - 《C++编程艺术》
- 惊奇
- Scheme自学教程 2
- DOM的基本方法!!
- 什么是DMA?(转)
- 遇到SubSonic