#ifndef __UIMANAGER_H__ #define __UIMANAGER_H__ #pragma once // 本头文件原本不含任何 include(符号由 StdAfx.h/UIlib.h 提供), // 但触屏相关的成员与状态里直接使用了 std::int64_t 与 std::vector, // 显式补齐以保证在 DuiLib 库工程(_WIN32_WINNT 兜底为 XP)里也能独立通过编译。 #include #include namespace DuiLib { ///////////////////////////////////////////////////////////////////////////////////// // class CControlUI; class CContainerUI; class CRichEditUI; class CIDropTarget; ///////////////////////////////////////////////////////////////////////////////////// // enum UILIB_RESTYPE { UILIB_FILE=1, // 来自磁盘文件 UILIB_ZIP, // 来自磁盘zip压缩包 UILIB_RESOURCE, // 来自资源 UILIB_ZIPRESOURCE, // 来自资源的zip压缩包 }; ///////////////////////////////////////////////////////////////////////////////////// // 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_RBUTTONUP, UIEVENT_MBUTTONDOWN, UIEVENT_MBUTTONUP, UIEVENT_DBLCLICK, UIEVENT_CONTEXTMENU, UIEVENT_SCROLLWHEEL, UIEVENT__MOUSEEND, // 触摸事件(NIM Duilib 模型)。必须排在 __MOUSEEND 之后: // CContainerUI::DoEvent 开头对 UIEVENT__MOUSEBEGIN~__MOUSEEND 区间做了 IsMouseEnabled 早退分支, // 排在区间之外才能保证触摸事件始终走正常派发与冒泡。 UIEVENT__TOUCHBEGIN, UIEVENT_TOUCHDOWN, UIEVENT_TOUCHMOVE, UIEVENT_TOUCHUP, UIEVENT__TOUCHEND, UIEVENT_KILLFOCUS, UIEVENT_SETFOCUS, UIEVENT_WINDOWSIZE, UIEVENT_SETCURSOR, UIEVENT_TIMER, UIEVENT__LAST, }; ///////////////////////////////////////////////////////////////////////////////////// // // 内部保留的消息 typedef enum MSGTYPE_UI { UIMSG_TRAYICON = WM_USER + 1,// 托盘消息 UIMSG_SET_DPI, // DPI WM_MENUCLICK, // 菜单消息 UIMSG_USER = WM_USER + 100, // 程序自定义消息 }; ///////////////////////////////////////////////////////////////////////////////////// // // 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 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; bool bStrikeout; TEXTMETRIC tm; } TFontInfo; typedef struct UILIB_API tagTImageInfo { tagTImageInfo(); Gdiplus::Image* pImage; 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(); void Parse(LPCTSTR pStrImage, LPCTSTR pStrModify, CPaintManagerUI *pManager); void Clear(); CDuiString sDrawString; CDuiString sDrawModify; CDuiString sImageName; CDuiString sResType; RECT rcDest; RECT rcSource; RECT rcCorner; DWORD dwMask; UINT uFade; UINT uRotate; bool bHole; bool bTiledX; bool bTiledY; bool bHSL; bool bGdiplus; CDuiSize szImage; RECT rcPadding; CDuiString sAlign; } 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_StyleHash; CStdStringPtrMap m_DrawInfoHash; } 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; // Drag&Drop control const TCHAR* const CF_MOVECONTROL = _T("CF_MOVECONTROL"); typedef struct UILIB_API tagTCFMoveUI { CControlUI* pControl; } TCFMoveUI; // Listener interface class INotifyUI { public: virtual void Notify(TNotifyUI& msg) = 0; }; // MessageFilter interface class IMessageFilterUI { public: virtual LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled) = 0; }; class ITranslateAccelerator { public: virtual LRESULT TranslateAccelerator(MSG *pMsg) = 0; }; class IDragDropUI { public: virtual bool OnDragDrop(CControlUI* pControl) { return false; } }; ///////////////////////////////////////////////////////////////////////////////////// // typedef CControlUI* (*LPCREATECONTROL)(LPCTSTR pstrType); class UILIB_API CPaintManagerUI : public CIDropTarget { public: CPaintManagerUI(); ~CPaintManagerUI(); public: void Init(HWND hWnd, LPCTSTR pstrName = NULL); bool IsUpdateNeeded() const; void NeedUpdate(); void Invalidate(); void Invalidate(RECT& rcItem); LPCTSTR GetName() const; HDC GetPaintDC() const; HWND GetPaintWindow() const; HWND GetTooltipWindow() const; 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(); void SetRoundCorner(int cx, int cy); SIZE GetMinInfo(); void SetMinInfo(int cx, int cy); SIZE GetMaxInfo(); void SetMaxInfo(int cx, int cy); bool IsShowUpdateRect(); void SetShowUpdateRect(bool show); bool IsNoActivate(); void SetNoActivate(bool bNoActivate); 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); CShadowUI* GetShadow(); void SetUseGdiplusText(bool bUse); bool IsUseGdiplusText() const; void SetGdiplusTextRenderingHint(int trh); int GetGdiplusTextRenderingHint() const; static HINSTANCE GetInstance(); static CDuiString GetInstancePath(); static CDuiString GetCurrentPath(); static HINSTANCE GetResourceDll(); static const CDuiString& GetResourcePath(); static const CDuiString& GetResourceZip(); static const CDuiString& GetResourceZipPwd(); 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, LPCTSTR password = NULL); static void SetResourceZip(LPCTSTR pstrZip, bool bCachedResourceZip = false, LPCTSTR password = NULL); static void SetResourceType(int nType); static int GetResourceType(); 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); // 注意:只支持简单类型指针,因为只释放内存,不会调用类对象的析构函数 void DeletePtr(void* ptr); 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 bStrikeout, bool bShared = false); DWORD GetCustomFontCount(bool bShared = false) const; void AddFontArray(LPCTSTR pstrPath); HFONT AddFont(int id, LPCTSTR pStrFontName, int nSize, bool bBold, bool bUnderline, bool bItalic, bool bStrikeout, bool bShared = false); HFONT GetFont(int id); HFONT GetFont(LPCTSTR pStrFontName, int nSize, bool bBold, bool bUnderline, bool bItalic, bool bStrikeout); int GetFontIndex(HFONT hFont, bool bShared = false); int GetFontIndex(LPCTSTR pStrFontName, int nSize, bool bBold, bool bUnderline, bool bItalic, bool bStrikeout, 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, bool bGdiplus = false, HINSTANCE instance = NULL); const TImageInfo* AddImage(LPCTSTR bitmap, LPCTSTR type = NULL, DWORD mask = 0, bool bUseHSL = false, bool bGdiplus = false, bool bShared = false, HINSTANCE instance = NULL); 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(); const TDrawInfo* GetDrawInfo(LPCTSTR pStrImage, LPCTSTR pStrModify); void RemoveDrawInfo(LPCTSTR pStrImage, LPCTSTR pStrModify); void RemoveAllDrawInfos(); 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(); // 样式管理 void AddStyle(LPCTSTR pName, LPCTSTR pStyle, bool bShared = false); LPCTSTR GetStyle(LPCTSTR pName) const; BOOL RemoveStyle(LPCTSTR pName, bool bShared = false); const CStdStringPtrMap& GetStyles(bool bShared = false) const; void RemoveAllStyle(bool bShared = false); const TImageInfo* GetImageString(LPCTSTR pStrImage, LPCTSTR pStrModify = NULL); // 初始化拖拽 bool EnableDragDrop(bool bEnable); void SetDragDrop(IDragDropUI* pDragDrop); virtual bool OnDrop(FORMATETC* pFmtEtc, STGMEDIUM& medium,DWORD *pdwEffect); bool IsValid(); 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); 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); void SendNotify(CControlUI* pControl, LPCTSTR pstrMessage, WPARAM wParam = 0, LPARAM lParam = 0, bool bAsync = false); bool AddPreMessageFilter(IMessageFilterUI* pFilter); bool RemovePreMessageFilter(IMessageFilterUI* pFilter); bool AddMessageFilter(IMessageFilterUI* pFilter); bool RemoveMessageFilter(IMessageFilterUI* pFilter); int GetPostPaintCount() const; bool IsPostPaint(CControlUI* pControl); bool AddPostPaint(CControlUI* pControl); bool RemovePostPaint(CControlUI* pControl); bool SetPostPaintIndex(CControlUI* pControl, int iIndex); int GetNativeWindowCount() const; RECT GetNativeWindowRect(HWND hChildWnd); bool AddNativeWindow(CControlUI* pControl, HWND hChildWnd); bool RemoveNativeWindow(HWND hChildWnd); void AddDelayedCleanup(CControlUI* pControl); void AddMouseLeaveNeeded(CControlUI* pControl); bool RemoveMouseLeaveNeeded(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(); CDPI* GetDPIObj(); void ResetDPIAssets(); void RebuildFont(TFontInfo* pFontInfo); void SetDPI(int iDPI); static void SetAllDPI(int iDPI); bool MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lRes); bool PreMessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lRes); void UsedVirtualWnd(bool bUsed); // 触屏支持(参考 NIM Duilib 模型,库级统一接管:主窗口 + 所有弹框通用)。 // WM_TOUCH 在 MessageHandler 里解析为原生 DuiLib 触摸事件,直接派发给命中的控件: // DOWN → UIEVENT_TOUCHDOWN 滚动条据此抓滑块;容器据此记手势起点(其余控件忽略) // MOVE → UIEVENT_TOUCHMOVE CScrollBarUI 消费则拖滑块;否则冒泡给 CContainerUI 做 1:1 跟手平移 // UP → UIEVENT_TOUCHUP 滚动条据此松开滑块;容器收尾(其余控件忽略) // 按钮“点击”【不】在此合成:它来自 Windows 为触摸自动提升(promote)的 WM_LBUTTONDOWN/UP, // 走 MessageHandler 原生鼠标路径 → CButtonUI 等据此 Activate() 触发 click。 // 不做任何“触摸→鼠标”归一化,也不做 NIM 那种 m_pEventTouch!=NULL 通用守卫(旧版 DuiLib 的 // 点击状态机强依赖原生 WM_LBUTTONDOWN/UP,照搬守卫会让点击全灭,已实测);仅用 // m_bTouchMoved 标记“本次手势是否发生位移”,位移则松开时不触发点击(避免滚动又误点)。 // 注册在 Init 中完成,无需逐窗口样板。 void InitTouchSupport(); void OnTouchInput(WPARAM wParam, LPARAM lParam); void ClearTouchHoverState(POINT pt); 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: CDuiString m_sName; HWND m_hWndPaint; //所附加的窗体的句柄 HDC m_hDcPaint; HDC m_hDcOffscreen; HDC m_hDcBackground; HBITMAP m_hbmpOffscreen; BYTE* m_pOffscreenBits; HBITMAP m_hbmpBackground; COLORREF* m_pBackgroundBits; // 提示信息 HWND m_hwndTooltip; TOOLINFO m_ToolTip; int m_iHoverTime; bool m_bNoActivate; bool m_bShowUpdateRect; // 触屏状态(库级统一接管后,每个窗口的 CPaintManagerUI 各持一份) // 鼠标点击仍由 WM_LBUTTONDOWN/UP 维护 m_pEventClick;触摸期间则由 // m_pEventTouch 和 m_bTouchMoved 独立维护,避免合成鼠标消息提前激活控件。 CControlUI* m_pEventTouch = NULL; // 本次触摸命中的控件 CContainerUI* m_pTouchScrollContainer = NULL; // 本次触摸对应的最近可滚动容器 POINT m_ptLastTouchPos = { 0, 0 }; // 上一包触点:用于去重 + 计算跟手滚动的位移增量 POINT m_ptTouchStart = { 0, 0 }; // 本次手势起点:用于判断是否发生位移(拖拽 vs 轻点) bool m_bTouchMoved = false; // 本次触摸是否发生位移(>阈值视为拖拽),松开时抑制点击 bool m_bSuppressPromotedTouchMouse = false; // 触摸点击已由 TOUCHUP 处理,丢弃随后提升的鼠标点击 // 手指抬起后,Windows 仍会补发合成的 WM_MOUSEMOVE;且真实 WM_MOUSELEAVE 在 // m_bMouseTracking 为真时会【自己给自己重发 WM_MOUSEMOVE】(UIManager.cpp WM_MOUSELEAVE 分支), // 导致刚清掉的悬浮态立刻被重新点亮 → “悬浮态不消失 / 多个控件同时悬浮”。 // 抬起后置 true,丢弃随后这批“非真实”的 MOUSEMOVE 悬浮逻辑;一旦收到用户真实移动鼠标 // (这里用“距上次触摸位置明显移动”判定)即解除。 // 注:这是【第二道】保险。第一道(根治)在 WM_MOUSEMOVE 里:凡带 MOUSEEVENTF_FROMTOUCH // 标记的“触摸提升出来的鼠标消息”一律不参与悬浮 enter/leave —— 触摸没有“光标停留”语义, // 让这类消息参与必然出现“点过的控件一直高亮 / 多点几个后多个同时高亮”。 bool m_bSuppressHoverAfterTouch = false; // CControlUI* m_pRoot; CControlUI* m_pFocus; CControlUI* m_pEventHover; CControlUI* m_pEventClick; CControlUI* m_pEventRClick; CControlUI* m_pEventKey; CControlUI* m_pLastToolTip; // 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_aTranslateAccelerator; CStdPtrArray m_aPreMessageFilters; CStdPtrArray m_aMessageFilters; CStdPtrArray m_aPostPaintControls; CStdPtrArray m_aNativeWindow; CStdPtrArray m_aNativeWindowControl; CStdPtrArray m_aDelayedCleanup; CStdPtrArray m_aAsyncNotify; CStdPtrArray m_aFoundControls; CStdPtrArray m_aFonts; CStdPtrArray m_aNeedMouseLeaveNeeded; CStdStringPtrMap m_mNameHash; CStdStringPtrMap m_mWindowCustomAttrHash; CStdStringPtrMap m_mOptionGroup; bool m_bForceUseSharedRes; TResInfo m_ResInfo; // 窗口阴影 CShadowUI m_shadow; // DPI管理器 CDPI* m_pDPI; // 是否开启Gdiplus bool m_bUseGdiplusText; int m_trh; ULONG_PTR m_gdiplusToken; Gdiplus::GdiplusStartupInput *m_pGdiplusStartupInput; // 拖拽 bool m_bDragDrop; bool m_bDragMode; HBITMAP m_hDragBitmap; IDragDropUI *m_pDragDrop; // static HINSTANCE m_hInstance; static HINSTANCE m_hResourceInstance; static CDuiString m_pStrResourcePath; static CDuiString m_pStrResourceZip; static CDuiString m_pStrResourceZipPwd; static HANDLE m_hResourceZip; static BYTE* m_cbZipBuf; static bool m_bCachedResourceZip; static int m_nResType; static TResInfo m_SharedResInfo; static bool m_bUseHSL; static short m_H; static short m_S; static short m_L; static CStdPtrArray m_aPreMessages; static CStdPtrArray m_aPlugins; }; } // namespace DuiLib #endif // __UIMANAGER_H__