DirectUI学习-(1) 创建第一个DirectUI程序
2015-04-16 15:18
211 查看
1. DirectUI介绍
DirectUI好处在于可以很方便的构建高效,绚丽的,非常易于扩展的界面。国外如微软,国内如腾讯,百度等公司的客户端产品多采用这种方式来组织界面,从而很好的将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色,换肤,透明等。DirectUI旨在满足客户端界面快速开发的需要,同时融入业界前沿的皮肤技术,为用户创建更加高效,专业的界面。DirectUI使用的是GDI+核心.
2. DirectUI 主要特性
◆支持皮肤对象的布局◆支持皮肤脚本(JavaScript)控制,可以让界面与逻辑彻底分离
◆支持bmp、png、jpg、gif、tga等图片格式
◆支持多图层Alpha混合特效
◆提供界面设计工具DirectUI Builder,支持拖拽式界面设计,让界面开发所见即所得
◆开放式开发平台,所有控件均为插件方式管理,支持用户自定义控件开发,与DirectUI平台无缝兼容
◆支持Windows平台所有的开发工具(VC++、VB6、VS Net、PowerBuilder、Delphi、C++Builder、E语言)
◆支持所有标准控件的换肤
◆支持皮肤对象的导出与导入
◆支持Windows主题导入,让标准界面皮肤的制作简单快捷
◆让客户端代码简洁明了
◆支持动画特效,滑动、淡入淡出
3. DirectUI库的获取
Duilib 是国内首个开源 的directui 界面库,开放,共享,惠众,共赢,遵循bsd协议,可以免费用于商业项目,目前支持Windows 32 、Window CE、Mobile等平台。Duilib是一款强大的界面开发工具,可以将用户界面和处理逻辑彻底分离,极大地提高用户界面的开发效率。提供所见即所得的开发工具UIDesigner。使用DirectUI后将使得我们的设计人员彻底解 放,不会受到开发的束缚,可以充分地发挥其设计能力来设计软件界面,并参与到用户界面开发过程中。 Duilib 目前支持Windows 32 、Window CE、Mobile等平台,使用C++开发,遵循BSD协议,可以免费用于商业项目 。
Duilib 库的源码:http://download.csdn.net/detail/kuangfengwu/8600671
Duilib 库:http://download.csdn.net/detail/kuangfengwu/8600601
如果想直接使用,可以下载库。解压出来后将dll拷贝到C:\Windows\System32或者C:\Windows\SysWOW64,取决于操作系统是32位还是64位。inc和lib在下面工程配置中使用。
4创建第一个DirectUI程序
4.1配置Duilib 库(1)首先配置头文件。在项目属性->配置属性->C/C++->常规->附加包含目录,添加目录... duilib sdk\inc,具体取决于第三节的inc文件夹解压缩位置。
(2)其次配置库文件。在项目属性->配置属性->链接器->常规->附加库目录,添加目录... duilib sdk\lib,具体取决于第三节的lib文件夹解压缩位置。
(3)最后在工程中添加以下定义,区别dubug和release,uinicode和非uinicode等4种版本
#define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_DEPRECATE #include <windows.h> #include <objbase.h> #include "UIlib.h" #ifdef _DEBUG # ifdef _UNICODE # pragma comment(lib, "DuiLib_ud.lib") # else # pragma comment(lib, "DuiLib_d.lib") # endif #else # ifdef _UNICODE # pragma comment(lib, "DuiLib_u.lib") # else # pragma comment(lib, "DuiLib.lib") # endif #endif
4.2 代码实现
(1)自定义窗口类,继承自CWindowWnd以及INotifyUI,这个就是主窗口类了。HandleMessage就是窗口的消息响应函数。
// 窗口实例及消息响应部分 class CFrameWindowWnd: publicCWindowWnd, publicINotifyUI { public: CFrameWindowWnd() { }; LPCTSTR GetWindowClassName() const { return _T("UIMainFrame"); }; UINT GetClassStyle() const { returnUI_CLASSSTYLE_FRAME | CS_DBLCLKS; }; voidOnFinalMessage(HWND /*hWnd*/){ delete this;}; voidNotify(TNotifyUI& msg) { if(msg.sType == _T("click")) { if( msg.pSender->GetName()== _T("closebtn")) { Close(); } } } LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { if(uMsg == WM_CREATE ) { m_pm.Init(m_hWnd); CControlUI *pButton =new CButtonUI; pButton->SetName(_T("closebtn")); pButton->SetBkColor(0xFFFF0000); m_pm.AttachDialog(pButton); m_pm.AddNotifier(this); return 0; } elseif( uMsg == WM_DESTROY ) { ::PostQuitMessage(0); } LRESULT lRes = 0; if(m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) return lRes; returnCWindowWnd::HandleMessage(uMsg, wParam, lParam); } public: CPaintManagerUI m_pm; };
(2)程序入口及Duilib初始化部分:用上述窗口类创建一个实例,然后显示窗口。这就是一个最简单的DerectUI程序了。
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE/*hPrevInstance*/, LPSTR /*lpCmdLine*/,int nCmdShow) { CPaintManagerUI::SetInstance(hInstance); CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath()); CFrameWindowWnd*pFrame = new CFrameWindowWnd(); if( pFrame == NULL ) return0; pFrame->Create(NULL, _T("测试"), UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE); pFrame->ShowWindow(true); CPaintManagerUI::MessageLoop(); return0; }
可以看出,这个程序分三个部分:
(1)Duilib使用设置部分,这个部分都是一些使用Duilib所需要的头文件和自动链接到相应的Duilib库,一般来说基本上不用改动。
(2)窗口实例及消息响应部分,基本的窗口实现类和简单的消息响应,需要重点关注的是中的事件处理,这是Duilib程序最重要的部分。
(3)程序入口及Duilib初始化部分,Duilib初始化和窗口创建。
编译这个程序,出现如下效果: 点击红色区域的任意位置,窗口会立即关闭。这样我们就完成了最简单的一个 Duilib程序编写,虽然这个例子还不能展现Duilib的强大,但也算是麻雀虽小,肝胆俱全了。
相关文章推荐
- android学习三---创建第一个程序
- C# 学习笔记 -- 第一天 创建第一个程序
- Node.js学习(二):创建第一个Node程序
- Android 学习日志 2 :创建虚拟机,运行第一个Hello Android程序
- TDD(测试驱动开发)学习二:创建第一个TDD程序
- TDD(测试驱动开发)学习二:创建第一个TDD程序
- android学习三---创建第一个程序
- Yii学习指南(改编)2--创建第一个 Yii 应用
- 【练习】 第一个oc程序的创建
- Linux编程之一:创建第一个C/C++程序
- 汇编语言学习第四章-第一个程序
- Python3学习笔记01-第一个Python程序
- java学习 第三节 第一个java程序
- android学习_android的第一个程序
- Android开发学习之三——第一个Android程序
- C++游戏之创建第一个窗体程序(一)
- 创建第一个java程序Welcome
- 快速学习单链表的创建和操作(包含程序和程序注解)
- 第一个java程序的学习
- caffe windows学习:第一个测试程序