• <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;



            但是在對(duì)話框消息處理中,對(duì)話框過程函數(shù)應(yīng)該在處理了消息的情況下返回TRUE,如果沒有處理,則返回FALSE。如果對(duì)話框過程返回了FALSE,那么對(duì)話框管理器為這條消息準(zhǔn)備默認(rèn)的對(duì)話操作。如果對(duì)話框處理了一個(gè)需要特定返回值的消息,則對(duì)話框的返回值應(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)處理


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久精品国产国产精品四凭| 狠狠色丁香婷婷综合久久来来去| 亚洲精品国产美女久久久| 久久午夜夜伦鲁鲁片免费无码影视| 亚洲午夜精品久久久久久app| 亚洲国产精品无码久久久秋霞2 | 国产精品热久久无码av| 亚洲国产香蕉人人爽成AV片久久 | 亚洲乱亚洲乱淫久久| 久久久亚洲精品蜜桃臀| 久久久无码精品午夜| 日韩精品久久久肉伦网站| 狠狠久久综合伊人不卡| 久久精品国产亚洲av水果派| 久久久久久极精品久久久| 亚洲人成伊人成综合网久久久| 国产综合精品久久亚洲| 99麻豆久久久国产精品免费| 久久久久久曰本AV免费免费| 久久国产午夜精品一区二区三区| 久久久久亚洲AV无码永不| 久久996热精品xxxx| 久久久这里有精品中文字幕| 亚洲中文字幕无码久久精品1| 久久精品国产99国产电影网| 7777精品久久久大香线蕉| 久久人人超碰精品CAOPOREN| 色综合久久88色综合天天| 婷婷久久综合九色综合九七| 国内精品久久久久久99蜜桃| 性欧美丰满熟妇XXXX性久久久| 午夜精品久久久久久| 久久久精品日本一区二区三区| 日本一区精品久久久久影院| www.久久热.com| 久久精品国产69国产精品亚洲| 91精品国产91久久久久久| 色综合久久综精品| 国产成人综合久久精品尤物| 久久精品人妻一区二区三区| 久久青青国产|