DuiLib库

下载地址:https://github.com/duilib/duilib 

DuiLib库 我们把它分为四个模块(核心,基础,控件,另外的库),当前有些也会把它分为5个模块(用户界面层,数据,事件处理,渲染模块,插件模块)


我们先讲下四个模块里包含了那些类
一.核心模块:UIMarkup(解析XML), CMarkupNode(节点),CRenderClip(渲染区域控制), CRenderEngine(渲染引擎), CPaintManagerUI(绘制管理者),IMessageFilterUI(消息处理),INotifyUI(监听者类),CDialogBuilder(UI构建者),IDialogBuilderCallback(用户自定义控件),CControlUI(控件), CDelegateBase(委托基类), CEventSource(事件源), CDelegate(委托), CDelegateStatic (静态委托)
二.基础模块:CPoint 点, CSize 宽高, CRect 矩形, CStdString 字符串, CWindowWind windows窗口, STRINCortID 资源ID, CStdStringMap 字符串map, CStdPtrArray 指针数组
三.控件模块:CEditUI 控件, CEditWnd 活跃窗口, CButtonUI 按钮控件, CLabelUI 标签控件, CScrollBarUI 滚动条控件, CSliderUI 滑块控件, CTextUI 文本控件, COptionUI 选项控件, CProgressUI 进度条控件, CTxtWinHost 文本窗口宿主, CRiochEditUI 富文本框控件, CActiveXUI ACtiveX组件, CActiveXWnd ActiveX窗口, CActiveXEnum 枚举ActiveX接口, CActiveXCtrl ActiveX容器, CComboWnd 活跃窗口, CComboUI Combo控件, CListBodyUI 列表体, IListCallBackUI 列表回调, IListOwnerUI 列表拥有者基类, IListUI 列表基类, CListUI 控件, CListHeaderUI 列表头, CListHeaderitemUI 列表头元素, IListitemUI 列表项基类, CListLabelElementUI 标签列表元素, CListTextElementUI 文本列表元素, CListContainerElementUI 器列表元素, IContainerUI 容器基类, CContainerUI 容器, CVerticalLayoutUI 纵向布局, CHorizontalLayoutUI 横向布局 CTileLayoutUI 平铺布局, CDialogLayoutUI 对话框容器, CTabLayoutUI 标签页容器。

四.其他库:XUzip 解压zip包, std_image 载入各种图像格式文件。

先讲一下核心模块里的类
1.CRenderClip 作用:渲染区域控制,设置在dc上绘制的区域,防止子控件绘制到父控件外侧(float属性控件除外)
函数:
GenerateClip() 产生一个剪切区域, hDC窗口句柄, rc区域, clip[out] 剪切区
GenerateRoundClip() 产生一个圆角剪切区域, hDC 窗口句柄, rcquyu, width 横向圆角弧度, height纵向圆角弧度, clip[out] 剪切区
UseOldClipBegin() 使用整个活跃区域作为剪切区, hDC窗口句柄, clip 剪切区
UseOldClipEnd() 使用当前控件有效区作为剪切区, hDC窗口句柄, clip剪切区
2.CRenderEngine 作用:渲染引擎
函数:
LoadImage() 加载位图
bitmap图像
type类型
mask隐蔽色
实现
1.读取文件,资源和zip包中图像文件数据到内存区,通过HIWORD(bitmap.m_lpstr)区别从资源中或文件中加载MAKEINTRESOURCE
2 创建DIB
3 通过stbi_koad_from_memory 加载数据文件并转化后复制到DIB中
4 返回TImageInfo结构

CRenderEngine 渲染引擎
LoadImage() 加载图像
bitmap 图像
type 类型
mask 隐蔽色
实现:
1 读取文件,资源和zip包中图像文件数据到内存, 通过HWORD(bitmap.m_lpstr)区别从资源中或文件中加载MAKEINTRESOURCE
2 创建DIB
3 通过stbi_load_from_memory加载数据文件并转化后复制到DIB中
4 返回TImageInfo结构

DrawImage() 绘制图像
hDC 设备句柄
hBitmap 位图句柄
rc 对象区域
rcPaint 绘制区域
rcBmpPart 位图区域
rcCorners 拉伸区域
alphaChannel alpha通道
uFade 透明度
hole 居中
xTiled 横向平铺
yTiled 纵向平铺
实现
1 CreateCompatibleDC 创建内存设备句柄
2 SelectObject 将位图选入内存设备句柄
3 AlphaBlend alpha混合
4 BitBlt 或者 StretchBlt 绘制到内存设备句柄
5 SelectObject 将老的位图选入内存设备句柄
6 DeleteDC 释放句柄
DrawImageString 标识字符串绘制图像
hDC 设备句柄
pManager 绘制管理者
rc 对象区域
rcPaint 绘制区域
pStrImage 标识字符串
pStrModify 标识字符串
实现:
1 分析标识字符串获取属性
2 获取图像数据
3 绘制图像
DrawColor 绘制颜色
hDC 设备句柄
rc 对象区域
color 颜色
实现
如果不需要alpha混合 则SetBkColor() ExtTextOut()
否则 创建一个大小的32位DIB
DrawGradient() 绘制渐变
hDC 设备句柄
rc 对象区域
dwFirst 颜色1
dwSecond 颜色2 
bVertical 渐变方向 true垂直 false 水平
nStep 步长
实现:
1 渐变填充
2 alpha混合
DrawLine 绘制直线
DrawRect 绘制矩形
DrawRoundRect 绘制圆角矩形
DrawText 绘制文字
DrawHtmlText 绘制“mini-html”标识字符串
hDC设备句柄
pManager 绘制管理者
rc 对象区域
pstrText “mini-html” 标识字符串
dwTextColor 字符串类型
pLinks 产生链接效果的区域组
sLinks 产生链接效果的区域组数量
nLinkRects 产生链接效果的区域组数量
uStyle 类型
GenerateBitmap 产生一个BMP位图
pManager 绘制管理者
pControl 控制句柄
rc 对象区域

返回BMP句柄  

转自:http://blog.csdn.net/x931100537/article/details/39291973


### 回答1: duilib是一款基于C++开发的UI界面,支持Windows操作系统。它提供了丰富的控件和样式,可以用于快速开发各种图形界面应用程序。 下面是一个简单的duilib的演示示例: #include "stdafx.h" #include "DuiLib/UIlib.h" using namespace DuiLib; int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { CPaintManagerUI::SetInstance(hInstance); CWndHostDemoWnd wnd; if(!wnd.Create(NULL, _T("DuiLib Demo"), UI_WNDSTYLE_DIALOG, 0L, 0, 0, 800, 600)) { return 0; } wnd.CenterWindow(); wnd.ShowWindow(true); CPaintManagerUI::MessageLoop(); return 0; } 以上代码是一个简单的程序入口函数,包含了duilib的初始化和创建一个对话框窗口的过程。其中CPaintManagerUI::SetInstance(hInstance);用于设置实例句柄,CWndHostDemoWnd是对话框窗口的自定义类;wnd.Create()用于创建窗口,参数依次为父窗口句柄、窗口名称、窗口样式、额外扩展样式、窗口的位置和大小;wnd.CenterWindow()用于将窗口居中显示;wnd.ShowWindow(true)将窗口显示出来;CPaintManagerUI::MessageLoop()是进入duilib的消息循环。 duilib的优点是使用方便,界面美观,扩展性强。它提供了丰富的控件和样式,能够满足不同应用场景的需求。通过duilib,开发人员可以快速构建出直观、交互友好的图形界面应用程序。有很多开发者使用duilib来开发各种类型的应用,例如电商平台、音乐播放器、管理系统等。使用duilib可以极大地提高开发效率,减少代码量,提升用户体验。 ### 回答2: Duilib是一个开源的C++ GUI,其主要用途是用于Windows平台下的桌面应用程序开发。下面是一个简单的Duilib的demo。 首先,需要包含头文件: ``` #include <duilib/UIlib.h> ``` 创建一个窗口类,继承自`WindowImplBase`: ``` class MyWindow : public WindowImplBase { public: virtual LPCTSTR GetWindowClassName() const { return _T("MyWindowClass"); } virtual CDuiString GetSkinFile() { return _T("mywindow.xml"); } virtual CDuiString GetSkinFolder() { return _T(""); } virtual void OnFinalMessage(HWND hWnd) { delete this; } virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { return __super::HandleMessage(uMsg, wParam, lParam); } virtual void InitWindow() { } virtual void Notify(TNotifyUI& msg) { } }; ``` 在应用程序的入口函数中创建窗口: ``` int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // 初始化Duilib CPaintManagerUI::SetInstance(hInstance); // 创建窗口 MyWindow* pWnd = new MyWindow(); if (pWnd == NULL) { return 0; } pWnd->Create(NULL, _T("MyWindowTitle"), UI_WNDSTYLE_FRAME, WS_EX_STATICEDGE); pWnd->CenterWindow(); pWnd->ShowWindow(); CPaintManagerUI::MessageLoop(); return 0; } ``` 在项目目录下创建一个名为`mywindow.xml`的XML文件,定义窗口的布局: ``` <?xml version="1.0" encoding="UTF-8"?> <Window> <Text pos="100, 100, 200, 200" text="Hello, World!" /> </Window> ``` 以上是一个使用Duilib创建一个简单的窗口的demo。通过继承`WindowImplBase`类来自定义窗口的行为,通过创建相应的XML布局文件来设计界面。Duilib提供了丰富的UI控件和事件处理机制,可以让开发者轻松实现复杂的Windows应用程序。 ### 回答3: duilib是一款基于C++开发的跨平台UI,它能够帮助开发者快速地构建漂亮、流畅、易于维护的图形用户界面。下面是一个简单的duilib的示例demo。 ```cpp #include "stdafx.h" #include "UIlib.h" using namespace DuiLib; class CMyWindow : public CWindowWnd, public INotifyUI { public: CMyWindow() {} virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); } virtual void Notify(TNotifyUI& msg) { if (msg.sType == _T("click")) { if (msg.pSender->GetName() == _T("btnClick")) { wstring text = msg.pSender->GetText(); MessageBox(NULL, text.c_str(), _T("提示"), MB_OK); } } } virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { LRESULT lRes = 0; if (uMsg == WM_CREATE) { m_pm.Init(m_hWnd); CDialogBuilder builder; CContainerUI* pContainer = static_cast<CContainerUI*>(builder.Create(_T("duilib.xml"), NULL, NULL, &m_pm)); if(pContainer) { m_pm.AttachDialog(pContainer); m_pm.AddNotifier(this); } } else if (uMsg == WM_CLOSE) { ::PostQuitMessage(0); return lRes; } else if (uMsg == WM_DESTROY) { ::PostQuitMessage(0); return lRes; } if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes)) return lRes; return CWindowWnd::HandleMessage(uMsg, wParam, lParam); } protected: CPaintManagerUI m_pm; }; int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { CPaintManagerUI::SetInstance(hInstance); CMyWindow myWindow; if (!myWindow.Create(NULL, _T("duilib demo"), UI_WNDSTYLE_DIALOG, 0L, 0, 0, 800, 600)) { return 0; } myWindow.CenterWindow(); myWindow.ShowWindow(true); CMessageLoop msgLoop; return msgLoop.Run(); } ``` 以上是一个简单的使用duilib的示例demo。它创建了一个窗口,加载了duilib.xml布局文件,并添加了一个按钮点击事件的响应处理函数。当点击按钮时,会弹出一个消息框显示按钮的文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值