• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 15, comments - 8, trackbacks - 0, articles - 2

            在Jeffrey的Error Show程序作者自定義了一段宏

            #define chHANDLE_DLGMSG(hWnd, message, fn)                 \
               case (message): return (SetDlgMsgResult(hWnd, uMsg,     \
                  HANDLE_##message((hWnd), (wParam), (lParam), (fn))))

            HANDLE_##message((hWnd), (wParam), (lParam), (fn))是借用了windows.h里面的

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

            如果message是WM_CREAT的話,這個(gè)應(yīng)該是

             HANDLE_WM_CREATE((hwnd), (wParam), (lParam), (Cls_OnCreate))

            #define HANDLE_WM_CREATE(hwnd, wParam, lParam, fn) \
                ((fn)((hwnd), (LPCREATESTRUCT)(lParam)) ? 0L : (LRESULT)-1L)

            那么宏展開為:return Cls_OnCreate(hwnd, (LPCREATESTRUCT)(lParam) )? 0L : (LRESULT)-1L;



            但是在對話框消息處理中,對話框過程函數(shù)應(yīng)該在處理了消息的情況下返回TRUE,如果沒有處理,則返回FALSE。如果對話框過程返回了FALSE,那么對話框管理器為這條消息準(zhǔn)備默認(rèn)的對話操作。如果對話框處理了一個(gè)需要特定返回值的消息,則對話框的返回值應(yīng)該被設(shè)置為調(diào)用SetWindowLong后的返回值,這些特殊消息有:

            ? WM_CHARTOITEM
            ? WM_COMPAREITEM
            ? WM_CTLCOLORBTN
            ? WM_CTLCOLORDLG
            ? WM_CTLCOLOREDIT
            ? WM_CTLCOLORLISTBOX
            ? WM_CTLCOLORSCROLLBAR
            ? WM_CTLCOLORSTATIC
            ? WM_INITDIALOG
            ? WM_QUERYDRAGICON
            ? WM_VKEYTOITEM

            所以在處理WM_INITDIALOG 時(shí),我們不能單純的調(diào)用消息分流器.

            而在處理WM_COMMAND中,從windowsx.h可以看到:

            /* void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) */
            #define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn) \
                ((fn)((hwnd), (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)

            void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)

            Cls_OnCommand由于是個(gè)void型的函數(shù),是沒有返回值的,因此windows默認(rèn)這種消息處理過程必須返回一個(gè)0值,而返回0值不就表示我們的消息過程不處理這個(gè)消息,這是矛盾的,如果直接使用HANDLE_WM_COMMAND(hwnd, wParam, lParam,  Dlg_OnCommand) ;按鈕會(huì)沒有反應(yīng),關(guān)閉也不行/所以可以使用使用下面的宏解決

            #define     SetDlgMsgResult(hwnd, msg, result) (( \
                    (msg) == WM_CTLCOLORMSGBOX      || \
                    (msg) == WM_CTLCOLOREDIT        || \
                    (msg) == WM_CTLCOLORLISTBOX     || \
                    (msg) == WM_CTLCOLORBTN         || \
                    (msg) == WM_CTLCOLORDLG         || \
                    (msg) == WM_CTLCOLORSCROLLBAR   || \
                    (msg) == WM_CTLCOLORSTATIC      || \
                    (msg) == WM_COMPAREITEM         || \
                    (msg) == WM_VKEYTOITEM          || \
                    (msg) == WM_CHARTOITEM          || \
                    (msg) == WM_QUERYDRAGICON       || \
                    (msg) == WM_INITDIALOG             \
                ) ? (BOOL)(result) : (SetWindowLong((hwnd), DWL_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE))

            #define chHANDLE_DLGMSG(hWnd, message, fn)                 \
               case (message): return (SetDlgMsgResult(hWnd, uMsg,     \
                  HANDLE_##message((hWnd), (wParam), (lParam), (fn))))

            從這兩個(gè)宏可以得到,如果是特殊消息的話那么返回默認(rèn)0,并設(shè)置說明消息處理,如果WM_COMMAND的話,那么返回SetWindowLong((hwnd), DWL_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE),一般為TRUE表明已經(jīng)處理

            国产亚洲精午夜久久久久久| 人妻精品久久无码区| 久久91精品综合国产首页| 狠狠干狠狠久久| 中文成人无码精品久久久不卡| 精品人妻伦九区久久AAA片69| 国内精品久久久久久久97牛牛| 久久国产成人午夜aⅴ影院 | 青青国产成人久久91网| 久久狠狠一本精品综合网| 国产A级毛片久久久精品毛片| 69国产成人综合久久精品| 久久久久久久综合综合狠狠| 久久人人爽爽爽人久久久| 久久天天躁狠狠躁夜夜av浪潮 | 久久久久久久久久免免费精品 | 亚洲av成人无码久久精品| 国产精品99久久久久久猫咪| 7777精品久久久大香线蕉| 99久久婷婷国产综合精品草原| 中文字幕无码精品亚洲资源网久久| 一本久久a久久精品综合夜夜 | 婷婷综合久久中文字幕| 久久久久女人精品毛片| 伊色综合久久之综合久久| 久久精品亚洲欧美日韩久久| 久久亚洲精品视频| 91久久婷婷国产综合精品青草 | 久久久久久久亚洲精品| 国产成人AV综合久久| 久久综合久久久| 狠狠久久综合伊人不卡| 99久久免费国产精品| 国产高清美女一级a毛片久久w | 久久影院久久香蕉国产线看观看| 91久久精品电影| 久久激情五月丁香伊人| 亚洲国产综合久久天堂| 国产69精品久久久久观看软件| 思思久久99热免费精品6| 欧美久久久久久|