#ifndef __UICONTROL_H__ #define __UICONTROL_H__ #pragma once namespace DuiLib { ///////////////////////////////////////////////////////////////////////////////////// // typedef CControlUI* (CALLBACK* FINDCONTROLPROC)(CControlUI*, LPVOID); class UILIB_API CControlUI { public: CControlUI(); virtual ~CControlUI(); public: virtual CDuiString GetName() const; virtual void SetName(LPCTSTR pstrName); virtual LPCTSTR GetClass() const; virtual LPVOID GetInterface(LPCTSTR pstrName); virtual UINT GetControlFlags() const; virtual HWND GetNativeWindow() const; virtual bool Activate(); virtual CPaintManagerUI* GetManager() const; virtual void SetManager(CPaintManagerUI* pManager, CControlUI* pParent, bool bInit = true); virtual CControlUI* GetParent() const; // 文本相关 virtual CDuiString GetText() const; virtual void SetText(LPCTSTR pstrText); virtual void SetText (LPCSTR pstrText); virtual void SetTextInt(int text); virtual void SetTextFloat(int text,int decimal = 2); // 图形相关 DWORD GetBkColor() const; void SetBkColor(DWORD dwBackColor); DWORD GetBkColor2() const; void SetBkColor2(DWORD dwBackColor); DWORD GetBkColor3() const; void SetBkColor3(DWORD dwBackColor); LPCTSTR GetBkImage(); void SetBkImage(LPCTSTR pStrImage); DWORD GetFocusBorderColor() const; void SetFocusBorderColor(DWORD dwBorderColor); bool IsColorHSL() const; void SetColorHSL(bool bColorHSL); SIZE GetBorderRound() const; void SetBorderRound(SIZE cxyRound); bool DrawImage(HDC hDC, TDrawInfo& drawInfo); //modify by Hong; void SetBkFillMode(LPCTSTR pstrMode); //边框相关 DWORD GetBorderColor() const; void SetBorderColor(DWORD dwBorderColor); RECT GetBorderSize() const; void SetBorderSize(RECT rc); void SetBorderSize(int iSize); int GetBorderStyle() const; void SetBorderStyle(int nStyle); // 位置相关 virtual const RECT& GetPos() const; virtual RECT GetRelativePos() const; // 相对(父控件)位置 virtual RECT GetClientPos() const; // 客户区域(除去scrollbar和inset) // 只有控件为float的时候,外部调用SetPos和Move才是有效的,位置参数是相对父控件的位置 virtual void SetPos(RECT rc, bool bNeedInvalidate = true); virtual void Move(SIZE szOffset, bool bNeedInvalidate = true); virtual int GetWidth() const; virtual int GetHeight() const; virtual int GetX() const; virtual int GetY() const; virtual RECT GetPadding() const; virtual void SetPadding(RECT rcPadding); // 设置外边距,由上层窗口绘制 virtual SIZE GetFixedXY() const; // 实际大小位置使用GetPos获取,这里得到的是预设的参考值 virtual void SetFixedXY(SIZE szXY); // 仅float为true时有效 virtual int GetFixedWidth() const; // 实际大小位置使用GetPos获取,这里得到的是预设的参考值 virtual void SetFixedWidth(int cx); // 预设的参考值 virtual int GetFixedHeight() const; // 实际大小位置使用GetPos获取,这里得到的是预设的参考值 virtual void SetFixedHeight(int cy); // 预设的参考值 virtual int GetMinWidth() const; virtual void SetMinWidth(int cx); virtual int GetMaxWidth() const; virtual void SetMaxWidth(int cx); virtual int GetMinHeight() const; virtual void SetMinHeight(int cy); virtual int GetMaxHeight() const; virtual void SetMaxHeight(int cy); virtual TPercentInfo GetFloatPercent() const; virtual void SetFloatPercent(TPercentInfo piFloatPercent); //add by hong; virtual void SetFixedSize (int cx,int cy); virtual BOOL PostMessageToPaintWindow (UINT msg, WPARAM wparam, LPARAM lparam); // 鼠标提示 virtual CDuiString GetToolTip() const; virtual void SetToolTip(LPCTSTR pstrText); virtual void SetToolTipWidth(int nWidth); virtual int GetToolTipWidth(void); // 多行ToolTip单行最长宽度 // 快捷键 virtual TCHAR GetShortcut() const; virtual void SetShortcut(TCHAR ch); // 菜单 virtual bool IsContextMenuUsed() const; virtual void SetContextMenuUsed(bool bMenuUsed); // 用户属性 virtual const CDuiString& GetUserData(); // 辅助函数,供用户使用 virtual void SetUserData(LPCTSTR pstrText); // 辅助函数,供用户使用 virtual UINT_PTR GetTag() const; // 辅助函数,供用户使用 virtual void SetTag(UINT_PTR pTag); // 辅助函数,供用户使用 // 一些重要的属性 virtual bool IsVisible() const; virtual void SetVisible(bool bVisible = true); virtual void SetInternVisible(bool bVisible = true); // 仅供内部调用,有些UI拥有窗口句柄,需要重写此函数 virtual bool IsEnabled() const; virtual void SetEnabled(bool bEnable = true); virtual bool IsMouseEnabled() const; virtual void SetMouseEnabled(bool bEnable = true); virtual bool IsKeyboardEnabled() const; virtual void SetKeyboardEnabled(bool bEnable = true); virtual bool IsFocused() const; virtual void SetFocus(); virtual bool IsFloat() const; virtual void SetFloat(bool bFloat = true); // 自定义(未处理的)属性 void AddCustomAttribute(LPCTSTR pstrName, LPCTSTR pstrAttr); LPCTSTR GetCustomAttribute(LPCTSTR pstrName) const; bool RemoveCustomAttribute(LPCTSTR pstrName); void RemoveAllCustomAttribute(); virtual CControlUI* FindControl(FINDCONTROLPROC Proc, LPVOID pData, UINT uFlags); CControlUI* FindSubControl (LPCTSTR pstrSubControlName); template ControlTy_* const FindSubControlEx (LPCTSTR lpstrName) { auto pControl = FindSubControl (lpstrName); return reinterpret_cast(pControl); }; #define DUI_SUBOBJ(obj_name,obj_parent) auto obj_name = obj_parent->FindSubControl(L#obj_name) #define DUI_SUBOBJ_EXT(obj_name,obj_type,obj_parent) auto obj_name = obj_parent->FindSubControlEx(L#obj_name) void Invalidate(); bool IsUpdateNeeded() const; void NeedUpdate(); void NeedParentUpdate(); DWORD GetAdjustColor(DWORD dwColor); virtual void Init(); virtual void DoInit(); virtual void Event(TEventUI& event); virtual void DoEvent(TEventUI& event); virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue); CControlUI* ApplyAttributeList(LPCTSTR pstrList); void SetColor_Normal(); void SetColor_Prewarning(); void SetColor_Warning(); void SetColor_Disable(); virtual SIZE EstimateSize(SIZE szAvailable); virtual void Paint(HDC hDC, const RECT& rcPaint); virtual void DoPaint(HDC hDC, const RECT& rcPaint); virtual void PaintBkColor(HDC hDC); virtual void PaintBkImage(HDC hDC); virtual void PaintStatusImage(HDC hDC); virtual void PaintText(HDC hDC); virtual void PaintBorder(HDC hDC); virtual void DoPostPaint(HDC hDC, const RECT& rcPaint); //虚拟窗口参数 void SetVirtualWnd(LPCTSTR pstrValue); CDuiString GetVirtualWnd() const; public: CEventSource OnInit; CEventSource OnDestroy; CEventSource OnSize; CEventSource OnEvent; CEventSource OnNotify; CEventSource OnPaint; CEventSource OnPostPaint; protected: CPaintManagerUI* m_pManager; CControlUI* m_pParent; CDuiString m_sVirtualWnd; CDuiString m_sName; bool m_bUpdateNeeded; bool m_bMenuUsed; RECT m_rcItem; RECT m_rcPadding; SIZE m_cXY; SIZE m_cxyFixed; SIZE m_cxyMin; SIZE m_cxyMax; bool m_bVisible; bool m_bInternVisible; bool m_bEnabled; bool m_bMouseEnabled; bool m_bKeyboardEnabled ; bool m_bFocused; bool m_bFloat; TPercentInfo m_piFloatPercent; bool m_bSetPos; // 防止SetPos循环调用 CDuiString m_sText; CDuiString m_sToolTip; TCHAR m_chShortcut; CDuiString m_sUserData; UINT_PTR m_pTag; DWORD m_dwBackColor; DWORD m_dwBackColor2; DWORD m_dwBackColor3; TDrawInfo m_diBk; TDrawInfo m_diFore; DWORD m_dwBorderColor; DWORD m_dwFocusBorderColor; bool m_bColorHSL; int m_nBorderStyle; int m_nTooltipWidth; SIZE m_cxyBorderRound; RECT m_rcPaint; RECT m_rcBorderSize; CStdStringPtrMap m_mCustomAttrHash; //modfiy by hong,Gradient fill mode; enum GRADIENT_FILL_MODE:DWORD { HOZ = GRADIENT_FILL_RECT_H, VET = GRADIENT_FILL_RECT_V }m_dwFillMode; }; } // namespace DuiLib #endif // __UICONTROL_H__