DirectUI学习-(1) 创建第一个DirectUI程序

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的强大,但也算是麻雀虽小,肝胆俱全了。 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值