模範MFC的消息映射表基礎,建立一個針對不用命令動作的消息模型
當然,這個只是最基本的應用,真正MFC的映射表比這可複雜多了...
但是,以此爲基礎就能開發出適用自己的消息模型,希望對大家有用
===================================================
#include <iostream>
class MyClass{
public:
// 定義一張結構表 表示命令與對應的處理函數
struct iCommandMap{
// 命令
int command;
// 處理命令的函數指針
void (MyClass::*pfn)(int param);
};
// 定義一個2個命令的表
const static iCommandMap iCmd[2];
// 對應命令的處理函數
void OnVoid1(int param) { std::cout << "I am void1 : param is " << param; }
void OnVoid2(int param) { std::cout << "I am void2 : param is " << param; }
};
// 將命令與處理函數存入結構數組中
const MyClass::iCommandMap MyClass::iCmd[] = {
0x01, OnVoid1,
0x02, OnVoid2,
};
// 簡化計算數組長度的宏
#define dim(x) (sizeof(x) / sizeof(x[0]))
int _tmain(int argc, _TCHAR* argv[])
{
// 聲明對象
MyClass mc;
// 命令
int command = 0x01; //改成 2 試試?
int param = 1234; //傳入函數的參數
// 遍歷命令表 調用與命令對應的函數指針
for(int i = 0; i < dim(mc.iCmd); i ++){
if(mc.iCmd[i].command == command)
(mc.*MyClass::iCmd[i].pfn)(param);
}
return 0;
}