用HANDLE_MSG讓代碼更清晰

最近接手了一個(gè)Win32軟件項(xiàng)目,其中涉及到大量消息的響應(yīng),通篇都是這樣的代碼

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

每種消息響應(yīng)都離不開wParam和lParam兩個(gè)參數(shù),而對(duì)于不同的系統(tǒng)消息,兩個(gè)參數(shù)的意義完全不同。對(duì)于不熟悉消息內(nèi)容的人,這樣的代碼很難閱讀和維護(hù),而且復(fù)雜的switch-case結(jié)構(gòu)看起來(lái)也很難受。幸運(yùn)的是,windows已經(jīng)通過宏定義HANDLE_MSG將消息和消息響應(yīng)函數(shù)對(duì)應(yīng)了起來(lái)。HANDLE_MSG使開發(fā)者只需要如何關(guān)心處理消息,不再需要不停的查MSDN啦。HANDLE_MSG是在windowsx.h中定義的:

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

宏的三個(gè)參數(shù)分別為窗口句柄hwnd、消息message和響應(yīng)函數(shù)fn。HANDLE_##message也是預(yù)定義宏,功能是從wParam和lParam中提取參數(shù)列表。但有一件事仍是開發(fā)者自己要做的,即定義根據(jù)消息的參數(shù)列表定義響應(yīng)函數(shù),只需按照windowsx.h中相應(yīng)HANDLE_##message復(fù)制粘貼即可。

使用宏簡(jiǎn)化后的代碼如下:

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

參考文獻(xiàn)

[1].使用HANDLE_MSG宏簡(jiǎn)化Win32應(yīng)用的開發(fā)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容