win32 DirectUI控件开发与调用指南
2012-03-23 07:54
309 查看
相较于win32/mfc,directui(win32)更加轻量化,在开发方式上更加现代化,使得其在c++应用方面成为主流,官方中提到了可以开发控件(插件),也就是说新的库可以不写在dui里,而独立出来。研究了许久终于知道如何玩,故此总结一下:
一、创建Dui DLL控件库
使用vc或vs创建一个win32 dll类型的项目,头文件PriceTableUI.h如下:
#pragma once class DuiLib_API PriceTableUI : public CContainerUI//注意要导出类 { public: PriceTableUI(); ~PriceTableUI(); LPCTSTR GetClass() const; LPVOID GetInterface(LPCTSTR pstrName); void DoEvent(TEventUI& event); void PaintText(HDC hDC); };
对应的代码PriceTableUI.cpp如下:
#include "StdAfx.h" #include "PriceTableUI.h" PriceTableUI::PriceTableUI() { } PriceTableUI::~PriceTableUI() { } LPCTSTR PriceTableUI::GetClass() const { return _T("PriceTableUI"); } LPVOID PriceTableUI::GetInterface( LPCTSTR pstrName ) { if( _tcscmp(pstrName, _T("PriceTable")) == 0 ) return static_cast<PriceTableUI*>(this); return CControlUI::GetInterface(pstrName); } void PriceTableUI::DoEvent( TEventUI& event ) { if( event.Type == UIEVENT_SETFOCUS ) { m_bFocused = true; return; } if( event.Type == UIEVENT_KILLFOCUS ) { m_bFocused = false; return; } if( event.Type == UIEVENT_MOUSEENTER )//鼠标进入控件 { return; } if( event.Type == UIEVENT_MOUSELEAVE )//鼠标离开控件 { return; } //其它事件(消息)go to 到dui里自己看了 CControlUI::DoEvent(event); } void PriceTableUI::PaintText( HDC hDC ) { RECT rect = m_rcPaint; HBRUSH redHBrush = CreateSolidBrush(RGB(255,0,0)); FillRect(hDC,&rect,redHBrush); TextOut(hDC,rect.left,rect.top,"china mobile",strlen("china mobile")); }
为了简化,这个示例没有对基类函数进一步实现,有需求自行去dui库里复制过来或者自己扩展即可。
二、在主程序中定向自定义控件
ControlEx.h如下:
#pragma once #include "stdafx.h" class CDialogBuilderCallbackEx : public IDialogBuilderCallback { public: CControlUI* CreateControl(LPCTSTR pstrClass) { if( _tcscmp(pstrClass, "PriceTable") == 0 ) return new PriceTableUI; return NULL; } };
三、调用控件
如此,即可在dui的xml界面文件里使用<PriceTable />或在程序中调用,比如:
PriceTableUI* table=static_cast<PriceTableUI*>(m_pm.FindControl("table1"));
相关文章推荐
- 多比图形控件开发指南(二)
- 用友二次开发 用友控件 Js宿主脚本 调用用友T6 登录 参照 控件示例
- Win32 SDK程序创建一些控件(简单调用InitCommonControlsEx,并指定ICC_LISTVIEW_CLASSES控件就可以了)
- WPF控件开发指南 1.2
- win32中调用Atl控件
- 使用VS2010开发ActiveX(MFC)控件(3)——添加接口及WEB调用
- Delphi中动态链接库两种调用方式的比较 ------D5开发人员指南上的
- 移动项目开发笔记(Asp.net控件之间的方法的互相调用)
- 使用VS2010开发ActiveX(MFC)控件(3)——添加接口及WEB调用
- C++ Builder XE8 安卓开发之indy10的线程控件如何正确调用VCL控件
- Win32 SDK开发中对话框控件消息处理
- VS2013开发上位机并调用MSCcommm控件的方式
- c#开发中mdi子窗体如何调用父窗体中控件
- vs2010开发activex(MFC)控件/ie插件(三),js调用ocx控件的接口函数
- JavaWeb开发,使用WebBrowser控件调用打印机打印页面
- 使用VS2010开发ActiveX(MFC)控件(3)——添加接口及WEB调用
- 如何在ASP.NET中调用第三方开发的控件?
- VS2010下ocx开发:(2)在C#程序中调用ocx控件
- vs2010开发activex(MFC)控件/ie插件(三),js调用ocx控件的接口函数
- Visual C++ 2010开发权威指南--5 MFC对话框控件