123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498 |
- #ifndef __UIMANAGER_H__
- #define __UIMANAGER_H__
- #pragma once
- namespace DuiLib {
- /////////////////////////////////////////////////////////////////////////////////////
- //
- class CControlUI;
- /////////////////////////////////////////////////////////////////////////////////////
- //
- typedef enum EVENTTYPE_UI
- {
- UIEVENT__FIRST = 1,
- UIEVENT__KEYBEGIN,
- UIEVENT_KEYDOWN,
- UIEVENT_KEYUP,
- UIEVENT_CHAR,
- UIEVENT_SYSKEY,
- UIEVENT__KEYEND,
- UIEVENT__MOUSEBEGIN,
- UIEVENT_MOUSEMOVE,
- UIEVENT_MOUSELEAVE,
- UIEVENT_MOUSEENTER,
- UIEVENT_MOUSEHOVER,
- UIEVENT_BUTTONDOWN,
- UIEVENT_BUTTONUP,
- UIEVENT_RBUTTONDOWN,
- UIEVENT_DBLCLICK,
- UIEVENT_CONTEXTMENU,
- UIEVENT_SCROLLWHEEL,
- UIEVENT__MOUSEEND,
- UIEVENT_KILLFOCUS,
- UIEVENT_SETFOCUS,
- UIEVENT_WINDOWSIZE,
- UIEVENT_SETCURSOR,
- UIEVENT_TIMER,
- UIEVENT_NOTIFY,
- UIEVENT_COMMAND,
- UIEVENT__LAST,
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- // Flags for CControlUI::GetControlFlags()
- #define UIFLAG_TABSTOP 0x00000001
- #define UIFLAG_SETCURSOR 0x00000002
- #define UIFLAG_WANTRETURN 0x00000004
- // Flags for FindControl()
- #define UIFIND_ALL 0x00000000
- #define UIFIND_VISIBLE 0x00000001
- #define UIFIND_ENABLED 0x00000002
- #define UIFIND_HITTEST 0x00000004
- #define UIFIND_UPDATETEST 0x00000008
- #define UIFIND_TOP_FIRST 0x00000010
- #define UIFIND_ME_FIRST 0x80000000
- // Flags for the CDialogLayout stretching
- #define UISTRETCH_NEWGROUP 0x00000001
- #define UISTRETCH_NEWLINE 0x00000002
- #define UISTRETCH_MOVE_X 0x00000004
- #define UISTRETCH_MOVE_Y 0x00000008
- #define UISTRETCH_SIZE_X 0x00000010
- #define UISTRETCH_SIZE_Y 0x00000020
- // Flags used for controlling the paint
- #define UISTATE_FOCUSED 0x00000001
- #define UISTATE_SELECTED 0x00000002
- #define UISTATE_DISABLED 0x00000004
- #define UISTATE_HOT 0x00000008
- #define UISTATE_PUSHED 0x00000010
- #define UISTATE_READONLY 0x00000020
- #define UISTATE_CAPTURED 0x00000040
- /////////////////////////////////////////////////////////////////////////////////////
- //
- typedef struct UILIB_API tagTFontInfo
- {
- HFONT hFont;
- CDuiString sFontName;
- int iSize;
- bool bBold;
- bool bUnderline;
- bool bItalic;
- TEXTMETRIC tm;
- } TFontInfo;
- typedef struct UILIB_API tagTImageInfo
- {
- HBITMAP hBitmap;
- LPBYTE pBits;
- LPBYTE pSrcBits;
- int nX;
- int nY;
- bool bAlpha;
- bool bUseHSL;
- CDuiString sResType;
- DWORD dwMask;
- } TImageInfo;
- typedef struct UILIB_API tagTDrawInfo
- {
- tagTDrawInfo();
- tagTDrawInfo(LPCTSTR lpsz);
- void Clear();
- CDuiString sDrawString;
- CDuiString sImageName;
- bool bLoaded;
- const TImageInfo* pImageInfo;
- RECT rcDestOffset;
- RECT rcBmpPart;
- RECT rcCorner;
- BYTE uFade;
- bool bHole;
- bool bTiledX;
- bool bTiledY;
- } TDrawInfo;
- typedef struct UILIB_API tagTPercentInfo
- {
- double left;
- double top;
- double right;
- double bottom;
- } TPercentInfo;
- typedef struct UILIB_API tagTResInfo
- {
- DWORD m_dwDefaultDisabledColor;
- DWORD m_dwDefaultFontColor;
- DWORD m_dwDefaultLinkFontColor;
- DWORD m_dwDefaultLinkHoverFontColor;
- DWORD m_dwDefaultSelectedBkColor;
- TFontInfo m_DefaultFontInfo;
- CStdStringPtrMap m_CustomFonts;
- CStdStringPtrMap m_ImageHash;
- CStdStringPtrMap m_AttrHash;
- CStdStringPtrMap m_MultiLanguageHash;
- } TResInfo;
- // Structure for notifications from the system
- // to the control implementation.
- typedef struct UILIB_API tagTEventUI
- {
- int Type;
- CControlUI* pSender;
- DWORD dwTimestamp;
- POINT ptMouse;
- TCHAR chKey;
- WORD wKeyState;
- WPARAM wParam;
- LPARAM lParam;
- } TEventUI;
- // Listener interface
- class UILIB_API INotifyUI
- {
- public:
- virtual void Notify(TNotifyUI& msg) = 0;
- };
- // MessageFilter interface
- class UILIB_API IMessageFilterUI
- {
- public:
- virtual LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled) = 0;
- };
- class UILIB_API ITranslateAccelerator
- {
- public:
- virtual LRESULT TranslateAccelerator(MSG *pMsg) = 0;
- };
- /////////////////////////////////////////////////////////////////////////////////////
- //
- typedef CControlUI* (*LPCREATECONTROL)(LPCTSTR pstrType);
- class UILIB_API CPaintManagerUI
- {
- public:
- CPaintManagerUI();
- ~CPaintManagerUI();
- public:
- //add
- CShadowUI* GetShadow();
- void Init(HWND hWnd, LPCTSTR pstrName = NULL);
- bool IsUpdateNeeded() const;
- void NeedUpdate();
- void Invalidate();
- void Invalidate(RECT& rcItem);
- LPCTSTR GetName() const;
- HDC GetPaintDC() const;
- //add by Hong
- HDC GetOffscreenDC() const;
- HWND GetPaintWindow() const;
- HWND GetTooltipWindow() const;
- int GetTooltipWindowWidth() const;
- void SetTooltipWindowWidth(int iWidth);
- int GetHoverTime() const;
- void SetHoverTime(int iTime);
- POINT GetMousePos() const;
- SIZE GetClientSize() const;
- SIZE GetInitSize();
- void SetInitSize(int cx, int cy);
- RECT& GetSizeBox();
- void SetSizeBox(RECT& rcSizeBox);
- RECT& GetCaptionRect();
- void SetCaptionRect(RECT& rcCaption);
- SIZE GetRoundCorner() const;
- void SetRoundCorner(int cx, int cy);
- SIZE GetMinInfo() const;
- void SetMinInfo(int cx, int cy);
- SIZE GetMaxInfo() const;
- void SetMaxInfo(int cx, int cy);
- bool IsShowUpdateRect() const;
- void SetShowUpdateRect(bool show);
- BYTE GetOpacity() const;
- void SetOpacity(BYTE nOpacity);
- bool IsLayered();
- void SetLayered(bool bLayered);
- RECT& GetLayeredInset();
- void SetLayeredInset(RECT& rcLayeredInset);
- BYTE GetLayeredOpacity();
- void SetLayeredOpacity(BYTE nOpacity);
- LPCTSTR GetLayeredImage();
- void SetLayeredImage(LPCTSTR pstrImage);
- static HINSTANCE GetInstance();
- static CDuiString GetInstancePath();
- static CDuiString GetCurrentPath();
- static HINSTANCE GetResourceDll();
- static const CDuiString& GetResourcePath();
- static const CDuiString& GetResourceZip();
- static bool IsCachedResourceZip();
- static HANDLE GetResourceZipHandle();
- static void SetInstance(HINSTANCE hInst);
- static void SetCurrentPath(LPCTSTR pStrPath);
- static void SetResourceDll(HINSTANCE hInst);
- static void SetResourcePath(LPCTSTR pStrPath);
- static void SetResourceZip(LPVOID pVoid, unsigned int len);
- static void SetResourceZip(LPCTSTR pstrZip, bool bCachedResourceZip = false);
- static bool GetHSL(short* H, short* S, short* L);
- static void SetHSL(bool bUseHSL, short H, short S, short L); // H:0~360, S:0~200, L:0~200
- static void ReloadSkin();
- static CPaintManagerUI* GetPaintManager(LPCTSTR pstrName);
- static CStdPtrArray* GetPaintManagers();
- static bool LoadPlugin(LPCTSTR pstrModuleName);
- static CStdPtrArray* GetPlugins();
- bool IsForceUseSharedRes() const;
- void SetForceUseSharedRes(bool bForce);
- DWORD GetDefaultDisabledColor() const;
- void SetDefaultDisabledColor(DWORD dwColor, bool bShared = false);
- DWORD GetDefaultFontColor() const;
- void SetDefaultFontColor(DWORD dwColor, bool bShared = false);
- DWORD GetDefaultLinkFontColor() const;
- void SetDefaultLinkFontColor(DWORD dwColor, bool bShared = false);
- DWORD GetDefaultLinkHoverFontColor() const;
- void SetDefaultLinkHoverFontColor(DWORD dwColor, bool bShared = false);
- DWORD GetDefaultSelectedBkColor() const;
- void SetDefaultSelectedBkColor(DWORD dwColor, bool bShared = false);
- TFontInfo* GetDefaultFontInfo();
- void SetDefaultFont(LPCTSTR pStrFontName, int nSize, bool bBold, bool bUnderline, bool bItalic, bool bShared = false);
- DWORD GetCustomFontCount(bool bShared = false) const;
- HFONT AddFont(int id, LPCTSTR pStrFontName, int nSize, bool bBold, bool bUnderline, bool bItalic, bool bShared = false);
- HFONT GetFont(int id);
- HFONT GetFont(LPCTSTR pStrFontName, int nSize, bool bBold, bool bUnderline, bool bItalic);
- int GetFontIndex(HFONT hFont, bool bShared = false);
- int GetFontIndex(LPCTSTR pStrFontName, int nSize, bool bBold, bool bUnderline, bool bItalic, bool bShared = false);
- void RemoveFont(HFONT hFont, bool bShared = false);
- void RemoveFont(int id, bool bShared = false);
- void RemoveAllFonts(bool bShared = false);
- TFontInfo* GetFontInfo(int id);
- TFontInfo* GetFontInfo(HFONT hFont);
- const TImageInfo* GetImage(LPCTSTR bitmap);
- const TImageInfo* GetImageEx(LPCTSTR bitmap, LPCTSTR type = NULL, DWORD mask = 0, bool bUseHSL = false);
- const TImageInfo* AddImage(LPCTSTR bitmap, LPCTSTR type = NULL, DWORD mask = 0, bool bUseHSL = false, bool bShared = false);
- const TImageInfo* AddImage(LPCTSTR bitmap, HBITMAP hBitmap, int iWidth, int iHeight, bool bAlpha, bool bShared = false);
- void RemoveImage(LPCTSTR bitmap, bool bShared = false);
- void RemoveAllImages(bool bShared = false);
- static void ReloadSharedImages();
- void ReloadImages();
- void AddDefaultAttributeList(LPCTSTR pStrControlName, LPCTSTR pStrControlAttrList, bool bShared = false);
- LPCTSTR GetDefaultAttributeList(LPCTSTR pStrControlName) const;
- bool RemoveDefaultAttributeList(LPCTSTR pStrControlName, bool bShared = false);
- void RemoveAllDefaultAttributeList(bool bShared = false);
- void AddWindowCustomAttribute(LPCTSTR pstrName, LPCTSTR pstrAttr);
- LPCTSTR GetWindowCustomAttribute(LPCTSTR pstrName) const;
- bool RemoveWindowCustomAttribute(LPCTSTR pstrName);
- void RemoveAllWindowCustomAttribute();
- static void AddMultiLanguageString(int id, LPCTSTR pStrMultiLanguage);
- static LPCTSTR GetMultiLanguageString(int id);
- static bool RemoveMultiLanguageString(int id);
- static void RemoveAllMultiLanguageString();
- static void ProcessMultiLanguageTokens(CDuiString& pStrMultiLanguage);
- bool AttachDialog(CControlUI* pControl);
- bool InitControls(CControlUI* pControl, CControlUI* pParent = NULL);
- void ReapObjects(CControlUI* pControl);
- bool AddOptionGroup(LPCTSTR pStrGroupName, CControlUI* pControl);
- CStdPtrArray* GetOptionGroup(LPCTSTR pStrGroupName);
- void RemoveOptionGroup(LPCTSTR pStrGroupName, CControlUI* pControl);
- void RemoveAllOptionGroups();
- CControlUI* GetFocus() const;
- void SetFocus(CControlUI* pControl, bool bFocusWnd=true);
- void SetFocusNeeded(CControlUI* pControl);
- bool SetNextTabControl(bool bForward = true);
- bool SetTimer(CControlUI* pControl, UINT nTimerID, UINT uElapse);
- bool KillTimer(CControlUI* pControl, UINT nTimerID);
- void KillTimer(CControlUI* pControl);
- void RemoveAllTimers();
- void SetCapture();
- void ReleaseCapture();
- bool IsCaptured();
- bool IsPainting();
- void SetPainting(bool bIsPainting);
- bool AddNotifier(INotifyUI* pControl);
- bool RemoveNotifier(INotifyUI* pControl);
- void SendNotify(TNotifyUI& Msg, bool bAsync = false, bool bEnableRepeat = true);
- void SendNotify(CControlUI* pControl, LPCTSTR pstrMessage, WPARAM wParam = 0, LPARAM lParam = 0, bool bAsync = false, bool bEnableRepeat = true);
- bool AddPreMessageFilter(IMessageFilterUI* pFilter);
- bool RemovePreMessageFilter(IMessageFilterUI* pFilter);
- bool AddMessageFilter(IMessageFilterUI* pFilter);
- bool RemoveMessageFilter(IMessageFilterUI* pFilter);
- int GetPostPaintCount() const;
- bool AddPostPaint(CControlUI* pControl);
- bool RemovePostPaint(CControlUI* pControl);
- bool SetPostPaintIndex(CControlUI* pControl, int iIndex);
- int GetNativeWindowCount() const;
- bool AddNativeWindow(CControlUI* pControl, HWND hChildWnd);
- bool RemoveNativeWindow(HWND hChildWnd);
- void AddDelayedCleanup(CControlUI* pControl);
- bool AddTranslateAccelerator(ITranslateAccelerator *pTranslateAccelerator);
- bool RemoveTranslateAccelerator(ITranslateAccelerator *pTranslateAccelerator);
- bool TranslateAccelerator(LPMSG pMsg);
- CControlUI* GetRoot() const;
- CControlUI* FindControl(POINT pt) const;
- CControlUI* FindControl(LPCTSTR pstrName) const;
- CControlUI* FindSubControlByPoint(CControlUI* pParent, POINT pt) const;
- CControlUI* FindSubControlByName(CControlUI* pParent, LPCTSTR pstrName) const;
- CControlUI* FindSubControlByClass(CControlUI* pParent, LPCTSTR pstrClass, int iIndex = 0);
- CStdPtrArray* FindSubControlsByClass(CControlUI* pParent, LPCTSTR pstrClass);
- static void MessageLoop();
- static bool TranslateMessage(const LPMSG pMsg);
- static void Term();
- bool MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lRes);
- bool PreMessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lRes);
- void UsedVirtualWnd(bool bUsed);
- private:
- CStdPtrArray* GetFoundControls();
- static CControlUI* CALLBACK __FindControlFromNameHash(CControlUI* pThis, LPVOID pData);
- static CControlUI* CALLBACK __FindControlFromCount(CControlUI* pThis, LPVOID pData);
- static CControlUI* CALLBACK __FindControlFromPoint(CControlUI* pThis, LPVOID pData);
- static CControlUI* CALLBACK __FindControlFromTab(CControlUI* pThis, LPVOID pData);
- static CControlUI* CALLBACK __FindControlFromShortcut(CControlUI* pThis, LPVOID pData);
- static CControlUI* CALLBACK __FindControlFromName(CControlUI* pThis, LPVOID pData);
- static CControlUI* CALLBACK __FindControlFromClass(CControlUI* pThis, LPVOID pData);
- static CControlUI* CALLBACK __FindControlsFromClass(CControlUI* pThis, LPVOID pData);
- static CControlUI* CALLBACK __FindControlsFromUpdate(CControlUI* pThis, LPVOID pData);
- static void AdjustSharedImagesHSL();
- void AdjustImagesHSL();
- void PostAsyncNotify();
- private:
- //add
- CShadowUI m_shadow;
- CDuiString m_sName;
- HWND m_hWndPaint;
- HDC m_hDcPaint;
- HDC m_hDcOffscreen;
- HDC m_hDcBackground;
- HBITMAP m_hbmpOffscreen;
- COLORREF* m_pOffscreenBits;
- HBITMAP m_hbmpBackground;
- COLORREF* m_pBackgroundBits;
- int m_iTooltipWidth;
- HWND m_hwndTooltip;
- TOOLINFO m_ToolTip;
- int m_iHoverTime;
- bool m_bShowUpdateRect;
- //
- CControlUI* m_pRoot;
- CControlUI* m_pFocus;
- CControlUI* m_pEventHover;
- CControlUI* m_pEventClick;
- CControlUI* m_pEventKey;
- //
- POINT m_ptLastMousePos;
- SIZE m_szMinWindow;
- SIZE m_szMaxWindow;
- SIZE m_szInitWindowSize;
- RECT m_rcSizeBox;
- SIZE m_szRoundCorner;
- RECT m_rcCaption;
- UINT m_uTimerID;
- bool m_bFirstLayout;
- bool m_bUpdateNeeded;
- bool m_bFocusNeeded;
- bool m_bOffscreenPaint;
- BYTE m_nOpacity;
- bool m_bLayered;
- RECT m_rcLayeredInset;
- bool m_bLayeredChanged;
- RECT m_rcLayeredUpdate;
- TDrawInfo m_diLayered;
- bool m_bMouseTracking;
- bool m_bMouseCapture;
- bool m_bIsPainting;
- bool m_bUsedVirtualWnd;
- bool m_bAsyncNotifyPosted;
- //
- CStdPtrArray m_aNotifiers;
- CStdPtrArray m_aTimers;
- CStdPtrArray m_aPreMessageFilters;
- CStdPtrArray m_aMessageFilters;
- CStdPtrArray m_aPostPaintControls;
- CStdPtrArray m_aNativeWindow;
- CStdPtrArray m_aNativeWindowControl;
- CStdPtrArray m_aDelayedCleanup;
- CStdPtrArray m_aAsyncNotify;
- CStdPtrArray m_aFoundControls;
- CStdStringPtrMap m_mNameHash;
- CStdStringPtrMap m_mWindowCustomAttrHash;
- CStdStringPtrMap m_mOptionGroup;
- //
- bool m_bForceUseSharedRes;
- TResInfo m_ResInfo;
- //
- static HINSTANCE m_hResourceInstance;
- static CDuiString m_pStrResourcePath;
- static CDuiString m_pStrResourceZip;
- static HANDLE m_hResourceZip;
- static bool m_bCachedResourceZip;
- static TResInfo m_SharedResInfo;
- static HINSTANCE m_hInstance;
- static bool m_bUseHSL;
- static short m_H;
- static short m_S;
- static short m_L;
- static CStdPtrArray m_aPreMessages;
- static CStdPtrArray m_aPlugins;
- public:
- CStdPtrArray m_aTranslateAccelerator;
- };
- } // namespace DuiLib
- #endif // __UIMANAGER_H__
|