亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        二級(jí)C宏--智者的利刃,愚者的惡夢(mèng)(中)

        字號(hào):

        例三、用C宏,自動(dòng)生成代碼這方面的例子也是多得很,不過(guò)有鑒于很多朋友不用很多編譯器,不做嵌入式的開(kāi)發(fā),我就舉個(gè)win平臺(tái)的例子吧。我們知道MFC實(shí)現(xiàn)了windows的消息映射,比如:
            ON_COMMAND(IDM_ABOUT, OnAbout)
            ON_COMMAND(IDM_FILENEW, OnFileNew)
            它是如何實(shí)現(xiàn)的IDM_ABOUT和OnAbout的關(guān)聯(lián)的呢?這要用到幾個(gè)宏。
            #define DECLARE_MESSAGE_MAP() \
            private: \
            static const AFX_MSGMAP_ENTRY _messageEntries[]; \
            protected: \
            static AFX_DATA const AFX_MSGMAP messageMap; \
            virtual const AFX_MSGMAP* GetMessageMap() const; \
            #define BEGIN_MESSAGE_MAP(theClass, baseClass) \
            const AFX_MSGMAP* theClass::GetMessageMap() const \
            { return &theClass::messageMap; } \
            AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
            { &baseClass::messageMap, &theClass::_messageEntries[0] }; \
            AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
            { \
            #define ON_COMMAND(id, memberFxn) \
            { WM_COMMAND, 0, (WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)memberFxn },
            #define END_MESSAGE_MAP() \
            {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
            }; \
            #define DECLARE_MESSAGE_MAP() \
            private: \
            static const AFX_MSGMAP_ENTRY _messageEntries[]; \
            protected: \
            static AFX_DATA const AFX_MSGMAP messageMap; \
            virtual const AFX_MSGMAP* GetMessageMap() const; \
            #define BEGIN_MESSAGE_MAP(theClass, baseClass) \
            const AFX_MSGMAP* theClass::GetMessageMap() const \
            { return &theClass::messageMap; } \
            AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
            { &baseClass::messageMap, &theClass::_messageEntries[0] }; \
            AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
            { \
            #define ON_COMMAND(id, memberFxn) \
            { WM_COMMAND, 0, (WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)memberFxn },
            #define END_MESSAGE_MAP() \
            {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
            }; \
            嘿嘿,就這么幾個(gè)宏,就構(gòu)造出一個(gè)消息數(shù)組來(lái)。