美文网首页
用HANDLE_MSG让代码更清晰

用HANDLE_MSG让代码更清晰

作者: 晓川君 | 来源:发表于2017-06-27 17:13 被阅读0次

    最近接手了一个Win32软件项目,其中涉及到大量消息的响应,通篇都是这样的代码

        switch (msg)
        {
            case WM_CREATE:
                //code A
                break;
            case WM_COMMAND:
                //code B
                break;
            //case ...
            //case ....
            case WM_EXIT:
                //code N
                break;
            default:
                break;
        }
    

    每种消息响应都离不开wParam和lParam两个参数,而对于不同的系统消息,两个参数的意义完全不同。对于不熟悉消息内容的人,这样的代码很难阅读和维护,而且复杂的switch-case结构看起来也很难受。幸运的是,windows已经通过宏定义HANDLE_MSG将消息和消息响应函数对应了起来。HANDLE_MSG使开发者只需要如何关心处理消息,不再需要不停的查MSDN啦。HANDLE_MSG是在windowsx.h中定义的:

    #define HANDLE_MSG(hwnd, message, fn)    \
        case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))
    

    宏的三个参数分别为窗口句柄hwnd、消息message和响应函数fn。HANDLE_##message也是预定义宏,功能是从wParam和lParam中提取参数列表。但有一件事仍是开发者自己要做的,即定义根据消息的参数列表定义响应函数,只需按照windowsx.h中相应HANDLE_##message复制粘贴即可。

    使用宏简化后的代码如下:

    HANDLE_MSG(hwnd, WM_CREATE, OnCreate);
    HANDLE_MSG(hwnd, WM_COMMAND, OnCommand);
    //...
    //...
    HANDLE_MSG(hwnd, WM_EXIT, OnExit);
    

    参考文献

    [1].使用HANDLE_MSG宏简化Win32应用的开发

    相关文章

      网友评论

          本文标题:用HANDLE_MSG让代码更清晰

          本文链接:https://www.haomeiwen.com/subject/rkyecxtx.html