有没有可能把窗口函数的内容设计得更模块化、更一般化些?下面是一种作法。请注意,
以下作法是MFC「消息映射表格」(第9章)的雏形,我所采用的结构名称和变量名称,
都与MFC 相同,藉此让你先有个暖身。
首先,定义一个MSGMAP_ENTRY 结构和一个dim 宏:
struct MSGMAP_ENTRY {
UINT nMessage;
LONG (*pfn)(HWND, UINT, WPARAM, LPARAM);
};
#define dim(x) (sizeof(x) / sizeof(x[0]))
请注意MSGMAP_ENTRY 的第二元素pfn 是一个函数指针,我准备以此指针所指之函
数处理nMessage 消息。这正是对象导向观念中把「资料」和「处理资料的方法」封装
起来的一种具体实现,只不过我们用的不是C++ 语言。
接下来,组织两个数组_messageEntries[ ] 和_commandEntries[ ],把程序中欲处理的消
息以及消息处理例程的关联性建立起来:
// 消息与处理例程之对照表格
struct MSGMAP_ENTRY _messageEntries[] =
{
WM_CREATE, OnCreate,
WM_PAINT, OnPaint,
WM_SIZE, OnSize,
WM_COMMAND, OnCommand,
WM_SETFOCUS, OnSetFocus,
WM_CLOSE, OnClose,
WM_DESTROY, OnDestroy,
} ; ↑ ↑
这是消息 这是消息处理例程对上面这点看不懂啊
特别是 struct MSGMAP_ENTRY _messageEntries[] =请大家指点一下,十分感谢

解决方案 »

  1.   

    不懂啊,
    struct MSGMAP_ENTRY _messageEntries[] =
    {
    WM_CREATE, OnCreate,
    WM_PAINT, OnPaint,
    WM_SIZE, OnSize,
    WM_COMMAND, OnCommand,
    WM_SETFOCUS, OnSetFocus,
    WM_CLOSE, OnClose,
    WM_DESTROY, OnDestroy,
    } ; ↑ ↑
    这是定义一个数组吗?
      

  2.   

    是的,这是定义一个数组,数组中每一个数的元素类型是MSGMAP_ENTRY,拿第一个元素来说:
    Message == WM_CREATE, pfn == OnCreate,
    所以到时候根据消息去查找这个数组,根据WM_CREATE就可以找到OnCreate了