123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- #pragma once
- //////////////BEGIN消息映射宏定义////////////////////////////////////////////////////
- ///
- namespace DuiLib
- {
- #define MAX_FONT_ID 30000
- #define LAYEREDUPDATE_TIMERID 0x2000
- enum DuiSig
- {
- DuiSig_end = 0, // [marks end of message map]
- DuiSig_lwl, // LRESULT (WPARAM, LPARAM)
- DuiSig_vn, // void (TNotifyUI)
- };
- class CControlUI;
- // Structure for notifications to the outside world
- typedef struct tagTNotifyUI
- {
- CDuiString sType;
- CDuiString sVirtualWnd;
- CControlUI* pSender;
- DWORD dwTimestamp;
- POINT ptMouse;
- WPARAM wParam;
- LPARAM lParam;
- } TNotifyUI;
- class CNotifyPump;
- typedef void (CNotifyPump::*DUI_PMSG)(TNotifyUI& msg); //指针类型
- union DuiMessageMapFunctions
- {
- DUI_PMSG pfn; // generic member function pointer
- LRESULT (CNotifyPump::*pfn_Notify_lwl)(WPARAM, LPARAM);
- void (CNotifyPump::*pfn_Notify_vn)(TNotifyUI&);
- };
- //定义所有消息类型
- //////////////////////////////////////////////////////////////////////////
- #define DUI_MSGTYPE_MENU (_T("menu"))
- #define DUI_MSGTYPE_LINK (_T("link"))
- #define DUI_MSGTYPE_TIMER (_T("timer"))
- #define DUI_MSGTYPE_CLICK (_T("click"))
- #define DUI_MSGTYPE_RETURN (_T("return"))
- #define DUI_MSGTYPE_SCROLL (_T("scroll"))
- #define DUI_MSGTYPE_DROPDOWN (_T("dropdown"))
- #define DUI_MSGTYPE_SETFOCUS (_T("setfocus"))
- #define DUI_MSGTYPE_KILLFOCUS (_T("killfocus"))
- #define DUI_MSGTYPE_ITEMCLICK (_T("itemclick"))
- #define DUI_MSGTYPE_TABSELECT (_T("tabselect"))
- #define DUI_MSGTYPE_ITEMSELECT (_T("itemselect"))
- #define DUI_MSGTYPE_ITEMEXPAND (_T("itemexpand"))
- #define DUI_MSGTYPE_WINDOWINIT (_T("windowinit"))
- #define DUI_MSGTYPE_BUTTONDOWN (_T("buttondown"))
- #define DUI_MSGTYPE_MOUSEENTER (_T("mouseenter"))
- #define DUI_MSGTYPE_MOUSELEAVE (_T("mouseleave"))
- #define DUI_MSGTYPE_TEXTCHANGED (_T("textchanged"))
- #define DUI_MSGTYPE_HEADERCLICK (_T("headerclick"))
- #define DUI_MSGTYPE_ITEMDBCLICK (_T("itemdbclick"))
- #define DUI_MSGTYPE_SHOWACTIVEX (_T("showactivex"))
- #define DUI_MSGTYPE_ITEMCOLLAPSE (_T("itemcollapse"))
- #define DUI_MSGTYPE_ITEMACTIVATE (_T("itemactivate"))
- #define DUI_MSGTYPE_VALUECHANGED (_T("valuechanged"))
- #define DUI_MSGTYPE_SELECTCHANGED (_T("selectchanged"))
- //////////////////////////////////////////////////////////////////////////
- struct DUI_MSGMAP_ENTRY;
- struct DUI_MSGMAP
- {
- #ifndef UILIB_STATIC
- const DUI_MSGMAP* (PASCAL* pfnGetBaseMap)();
- #else
- const DUI_MSGMAP* pBaseMap;
- #endif
- const DUI_MSGMAP_ENTRY* lpEntries;
- };
- //结构定义
- struct DUI_MSGMAP_ENTRY //定义一个结构体,来存放消息信息
- {
- CDuiString sMsgType; // DUI消息类型
- CDuiString sCtrlName; // 控件名称
- UINT nSig; // 标记函数指针类型
- DUI_PMSG pfn; // 指向函数的指针
- };
- //定义
- #ifndef UILIB_STATIC
- #define DUI_DECLARE_MESSAGE_MAP() \
- private: \
- static const DUI_MSGMAP_ENTRY _messageEntries[]; \
- protected: \
- static const DUI_MSGMAP messageMap; \
- static const DUI_MSGMAP* PASCAL _GetBaseMessageMap(); \
- virtual const DUI_MSGMAP* GetMessageMap() const; \
- #else
- #define DUI_DECLARE_MESSAGE_MAP() \
- private: \
- static const DUI_MSGMAP_ENTRY _messageEntries[]; \
- protected: \
- static const DUI_MSGMAP messageMap; \
- virtual const DUI_MSGMAP* GetMessageMap() const; \
- #endif
- //基类声明开始
- #ifndef UILIB_STATIC
- #define DUI_BASE_BEGIN_MESSAGE_MAP(theClass) \
- const DUI_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \
- { return NULL; } \
- const DUI_MSGMAP* theClass::GetMessageMap() const \
- { return &theClass::messageMap; } \
- UILIB_COMDAT const DUI_MSGMAP theClass::messageMap = \
- { &theClass::_GetBaseMessageMap, &theClass::_messageEntries[0] };\
- UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
- { \
- #else
- #define DUI_BASE_BEGIN_MESSAGE_MAP(theClass) \
- const DUI_MSGMAP* theClass::GetMessageMap() const \
- { return &theClass::messageMap; } \
- UILIB_COMDAT const DUI_MSGMAP theClass::messageMap = \
- { NULL, &theClass::_messageEntries[0] }; \
- UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
- { \
- #endif
- //子类声明开始
- #ifndef UILIB_STATIC
- #define DUI_BEGIN_MESSAGE_MAP(theClass, baseClass) \
- const DUI_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \
- { return &baseClass::messageMap; } \
- const DUI_MSGMAP* theClass::GetMessageMap() const \
- { return &theClass::messageMap; } \
- UILIB_COMDAT const DUI_MSGMAP theClass::messageMap = \
- { &theClass::_GetBaseMessageMap, &theClass::_messageEntries[0] }; \
- UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
- { \
- #else
- #define DUI_BEGIN_MESSAGE_MAP(theClass, baseClass) \
- const DUI_MSGMAP* theClass::GetMessageMap() const \
- { return &theClass::messageMap; } \
- UILIB_COMDAT const DUI_MSGMAP theClass::messageMap = \
- { &baseClass::messageMap, &theClass::_messageEntries[0] }; \
- UILIB_COMDAT const DUI_MSGMAP_ENTRY theClass::_messageEntries[] = \
- { \
- #endif
- //声明结束
- #define DUI_END_MESSAGE_MAP() \
- { _T(""), _T(""), DuiSig_end, (DUI_PMSG)0 } \
- }; \
- //定义消息类型--执行函数宏
- #define DUI_ON_MSGTYPE(msgtype, memberFxn) \
- { msgtype, _T(""), DuiSig_vn, (DUI_PMSG)&memberFxn}, \
- //定义消息类型--控件名称--执行函数宏
- #define DUI_ON_MSGTYPE_CTRNAME(msgtype,ctrname,memberFxn) \
- { msgtype, ctrname, DuiSig_vn, (DUI_PMSG)&memberFxn }, \
- //定义click消息的控件名称--执行函数宏
- #define DUI_ON_CLICK_CTRNAME(ctrname,memberFxn) \
- { DUI_MSGTYPE_CLICK, ctrname, DuiSig_vn, (DUI_PMSG)&memberFxn }, \
- //定义selectchanged消息的控件名称--执行函数宏
- #define DUI_ON_SELECTCHANGED_CTRNAME(ctrname,memberFxn) \
- { DUI_MSGTYPE_SELECTCHANGED,ctrname,DuiSig_vn,(DUI_PMSG)&memberFxn }, \
- //定义killfocus消息的控件名称--执行函数宏
- #define DUI_ON_KILLFOCUS_CTRNAME(ctrname,memberFxn) \
- { DUI_MSGTYPE_KILLFOCUS,ctrname,DuiSig_vn,(DUI_PMSG)&memberFxn }, \
- //定义menu消息的控件名称--执行函数宏
- #define DUI_ON_MENU_CTRNAME(ctrname,memberFxn) \
- { DUI_MSGTYPE_MENU,ctrname,DuiSig_vn,(DUI_PMSG)&memberFxn }, \
- //定义与控件名称无关的消息宏
- //定义timer消息--执行函数宏
- #define DUI_ON_TIMER() \
- { DUI_MSGTYPE_TIMER, _T(""), DuiSig_vn,(DUI_PMSG)&OnTimer }, \
- ///
- //////////////END消息映射宏定义////////////////////////////////////////////////////
- //////////////BEGIN控件名称宏定义//////////////////////////////////////////////////
- ///
- #define DUI_CTR_EDIT (_T("Edit"))
- #define DUI_CTR_LIST (_T("List"))
- #define DUI_CTR_TEXT (_T("Text"))
- #define DUI_CTR_COMBO (_T("Combo"))
- #define DUI_CTR_LABEL (_T("Label"))
- #define DUI_CTR_FLASH (_T("Flash"))
- #define DUI_CTR_BUTTON (_T("Button"))
- #define DUI_CTR_OPTION (_T("Option"))
- #define DUI_CTR_SLIDER (_T("Slider"))
- #define DUI_CTR_CONTROL (_T("Control"))
- #define DUI_CTR_ACTIVEX (_T("ActiveX"))
- #define DUI_CTR_GIFANIM (_T("GifAnim"))
- #define DUI_CTR_LISTITEM (_T("ListItem"))
- #define DUI_CTR_PROGRESS (_T("Progress"))
- #define DUI_CTR_RICHEDIT (_T("RichEdit"))
- #define DUI_CTR_CHECKBOX (_T("CheckBox"))
- #define DUI_CTR_COMBOBOX (_T("ComboBox"))
- #define DUI_CTR_DATETIME (_T("DateTime"))
- #define DUI_CTR_TREEVIEW (_T("TreeView"))
- #define DUI_CTR_TREENODE (_T("TreeNode"))
- #define DUI_CTR_CONTAINER (_T("Container"))
- #define DUI_CTR_TABLAYOUT (_T("TabLayout"))
- #define DUI_CTR_SCROLLBAR (_T("ScrollBar"))
- #define DUI_CTR_LISTHEADER (_T("ListHeader"))
- #define DUI_CTR_TILELAYOUT (_T("TileLayout"))
- #define DUI_CTR_WEBBROWSER (_T("WebBrowser"))
- #define DUI_CTR_CHILDLAYOUT (_T("ChildLayout"))
- #define DUI_CTR_LISTELEMENT (_T("ListElement"))
- #define DUI_CTR_DIALOGLAYOUT (_T("DialogLayout"))
- #define DUI_CTR_VERTICALLAYOUT (_T("VerticalLayout"))
- #define DUI_CTR_LISTHEADERITEM (_T("ListHeaderItem"))
- #define DUI_CTR_LISTTEXTELEMENT (_T("ListTextElement"))
- #define DUI_CTR_HORIZONTALLAYOUT (_T("HorizontalLayout"))
- #define DUI_CTR_LISTLABELELEMENT (_T("ListLabelElement"))
- #define DUI_CTR_LISTCONTAINERELEMENT (_T("ListContainerElement"))
- ///
- //////////////END控件名称宏定义//////////////////////////////////////////////////
- }// namespace DuiLib
|