duilib自定义控件
来源:互联网 发布:网络追踪命令 编辑:程序博客网 时间:2024/06/08 02:15
1.控件接口
重写 GetClass() 和 GetInterface 接口
- class CSkinPikerPictureItemUI : public CButtonUI
- {
- public:
- CSkinPikerPictureItemUI();
- LPCTSTR GetClass() const;
- LPVOID GetInterface(LPCTSTR pstrName);
- void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
- void PaintStatusImage(HDC hDC);
- private:
- CDuiString m_BkName;
- CDuiString m_Author;
- };
- LPCTSTR CSkinPikerPictureItemUI::GetClass() const
- {
- return kSkinPickerPictureItemClassName;
- }
- LPVOID CSkinPikerPictureItemUI::GetInterface(LPCTSTR pstrName)
- {
- if( _tcscmp(pstrName, kSkinPickerPictureItemInterface) == 0 ) return static_cast<CSkinPikerPictureItemUI*>(this);
- return CButtonUI::GetInterface(pstrName);
- }
2. 识别控件
通常情况下,可以让窗体类继承IDialogBuilderCallback接口并且重写CreateControl(DuiLib自带的WindowImplBase窗体类已经继承了这个接口,如果是继承WindowImplBase的话就直接重写CreateControl就可以了)。函数处理方法是比较传入的字符串,根据字符串来决定返回什么控件的指针,这个传入的字符串就是xml文件中控件的标签,比如<Button />中的字符串Button。
- CControlUI* CSkinPickerDialog::CreateControl(LPCTSTR pstrClass)
- {
- if (_tcsicmp(pstrClass, kSkinPickerPictureItemInterface) == 0)
- return new CSkinPikerPictureItemUI();
- return NULL;
- }
方法2: 添加回调函数,让程序识别控件
继承 IDialogBuilderCallback,添加createcontrol接口
class CDialogBuilderCallbackEx : public IDialogBuilderCallback
{
public:
CControlUI* CreateControl(LPCTSTR pstrClass)
{
if( _tcscmp(pstrClass, _T("ComputerExamine")) == 0 )
return new ComputerExamineUI;
return NULL;
}
};
{
public:
CControlUI* CreateControl(LPCTSTR pstrClass)
{
if( _tcscmp(pstrClass, _T("ComputerExamine")) == 0 )
return new ComputerExamineUI;
return NULL;
}
};
在主对话框创建时添加回调
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
styleValue &= ~WS_CAPTION;
::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
m_pm.Init(m_hWnd);
CDialogBuilder builder;
CDialogBuilderCallbackEx cb;
CControlUI* pRoot = builder.Create(_T("skin.xml"), (UINT)0, &cb, &m_pm);
ASSERT(pRoot && "Failed to parse XML");
m_pm.AttachDialog(pRoot);
m_pm.AddNotifier(this);
Init();
return 0;
}
{
LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
styleValue &= ~WS_CAPTION;
::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
m_pm.Init(m_hWnd);
CDialogBuilder builder;
CDialogBuilderCallbackEx cb;
CControlUI* pRoot = builder.Create(_T("skin.xml"), (UINT)0, &cb, &m_pm);
ASSERT(pRoot && "Failed to parse XML");
m_pm.AttachDialog(pRoot);
m_pm.AddNotifier(this);
Init();
return 0;
}
3自定义控件为了让界面更丰富,常用重载函数:
virtual void DoEvent(TEventUI& event);
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 DoInit();
virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
virtual bool IsVisible() const;
virtual void SetVisible(bool bVisible = true);
virtual void SetInternVisible(bool bVisible = true); // 仅供内部调用,有些UI拥有窗口句柄,需要重写此函数
virtual void SetPos(RECT rc);
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 DoInit();
virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
virtual bool IsVisible() const;
virtual void SetVisible(bool bVisible = true);
virtual void SetInternVisible(bool bVisible = true); // 仅供内部调用,有些UI拥有窗口句柄,需要重写此函数
virtual void SetPos(RECT rc);
阅读全文
0 0
- DuiLib实现自定义控件
- Duilib 创建自定义控件
- duilib自定义控件
- duilib 自定义控件1 CTileLayoutUI
- Duilib创建添加自定义控件
- duilib中,子xml创建自定义控件
- duilib 自定义控件TeamList 继承与CListUI
- duilib学习记录之创建自定义控件
- 【duilib进阶】自定义控件响应指定命令
- duilib进阶教程 -- XML嵌套及自定义控件 (4)
- Duilib中为RichEdit\Edit控件添加自定义右键菜单
- duilib开发基础:创建自定义控件的过程
- duilib获取CSliderUI滑动事件 - 用自定义控件实现
- Duilib中为RichEdit\Edit控件添加自定义右键菜单
- duilib开发基础:创建自定义控件的过程
- Duilib中的控件消息
- duilib list控件扩展
- duilib CTileLayoutUI 控件
- Qt源代码编码问题
- BOM 和 DOM 的区别
- 基于JDK1.6,实现WebService
- linux 安装gcc
- OCR开发车架号识别vin码识别系统
- duilib自定义控件
- jQuery插件之 Growl
- 几种排序算法的Java实现
- HDU 1559 最大子矩阵 (给定大小) DP
- ⑨设计模式之模板模式(Template Module)
- CSS3的笔记总结
- off 格式
- WOJ-6 Language of Animals
- UTF-8 and UTF-8 without BOM