123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- #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<class ControlTy_ = CControlUI>
- ControlTy_* const FindSubControlEx (LPCTSTR lpstrName)
- {
- auto pControl = FindSubControl (lpstrName);
- return reinterpret_cast<ControlTy_*>(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<obj_type>(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__
|