当前位置:   article > 正文

Duilib--->Duilib库介绍&总结&概述

duilib

DuiLib库

介绍:

DuiLib(第三方库,应用窗口美化,逻辑操作与界面分离,用XML文档进行界面编辑)(DUI与GUI/VUI的对比)

概念与定义:

DuiLib库是轻量级的C++界面开发库。duilib并没有像MFC那样把所有的东西全包了,它仅仅包装了UI部分而已,其他的还是需要用win32、MFC的知识,所以除了UI部分,其他的都和duilib没有关系。
逻辑操作与界面分离了。

DuiLib库优点与缺陷:

优点:
  1. 基于GDI在窗口上自绘,无其他依赖,未使用特殊或危险的系统调用,能够很好的解决传统MFC界面的一系列问题。
  2. 使用XML来描述界面风格,界面布局,将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色,换肤,透明等。
  3. 完全兼容ActiveX控件(如常见的IE控件和Flash),也可以和MFC等界面库配合使用。
  4. 可广泛用于互联网客户端、工具软件客户端、管理系统客户端、多媒体客户端(如KTV、触摸屏)、车载电脑系统、gps系统和手机客户端软件等。
缺陷:
  1. 没有帮助文档
  2. 后期没有进行维护

使用

环境配置:

1.下载,将DuiLib设为启动项,将项目配置全部批生成。
2.将DuiLib与lib文件夹拷贝至项目目录下,[附加包含目录]添加[Duilib]的路径,[附加库目录]添加[lib]路径,将[bin]目录下的.dll(应用程序扩展)拷贝至项目[Dubug]目录下。
几个重要类的学习:
WindowImplBase
class UILIB_API WindowImplBase
: public CWindowWnd //基本窗口的创建与消息处理,【源码
, public CNotifyPump //Duilib虚拟界面由CNotifyPump类控制
, public INotifyUI //消息通知
, public IMessageFilterUI //消息过滤
, public IDialogBuilderCallback //对话框建立消息回馈
{…};
CPaintManagerUI //控件的绘制,一般直接传入XML文档,写函数绘制太麻烦了

初步介绍

由于DuiLib库没有文档说明,在使用之后做出了如下总结,算是方便以后查阅,也分享给大家。有部分内容是拷贝转载的,已注明来源(精华提取,就不用跳过去看了)

主函数入口地址

_tWinMain	//主函数入口地址
#define _tWinMain   wWinMain
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow){}
//lpCmdLine 是命令行参数,nCmdShow 是窗体显示方式,hInstance 是实例句柄,hPrevInstance 这个参数是Win16 的遗留参数。
  • 1
  • 2
  • 3
  • 4

启动代码调用Win32 API,获取hInstance,lpCmdLine,nCmdShow 3个参数。
hInstance 实际上通常,这个是程序的启动地址,大概是0x400000 即 4M 的位置,4M 以下是系统保留的------用于捕获空指针异常的,因为 Win32 每个进程,有自己的地址空间,所以,几乎都是从同一地址启动的。
hPrevInstance 这个参数是Win16 的遗留参数,用来判断,同一程序的另一个实例,是否已经启动,缺省设置为NULL。

控件与界面的绘制

CPaintManagerUI		//控件与界面的绘制,一般直接传入XML文档,写函数绘制太麻烦了
CPaintManagerUI::SetInstance(hInstance);
CPaintManagerUI::SetInstance(hInstance);
CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());   // 设置资源的默认路径(此处设置为和exe在同一目录)
  • 1
  • 2
  • 3
  • 4

进阶使用&相关基础

Win32应用程序流程

1.注册窗口类
2.创建窗口
3.显示窗口&更新窗口
4.消息队列
  • 1
  • 2
  • 3
  • 4

MFC(将Win32的步骤封装成类,但是界面并不好看)

DuiLib(第三方库,应用窗口美化,逻辑操作与界面分离,用XML文档进行界面编辑

  • 1>概念与定义
    DuiLib库是轻量级的C++界面开发库。duilib并没有像MFC那样把所有的东西全包了,它仅仅包装了UI部分而已,其他的还是需要用win32、MFC的知识,所以除了UI部分,其他的都和duilib没有关系。
    逻辑操作与界面分离了。
  • 2>DuiLib库优点
    1. 基于GDI在窗口上自绘,无其他依赖,未使用特殊或危险的系统调用,能够很好的解决传统MFC界面的一系列问题。
    2. 使用XML来描述界面风格,界面布局,将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色,换肤,透明等。
    3. 完全兼容ActiveX控件(如常见的IE控件和Flash),也可以和MFC等界面库配合使用。
    4. 可广泛用于互联网客户端、工具软件客户端、管理系统客户端、多媒体客户端(如KTV、触摸屏)、车载电脑系统、gps系统和手机客户端软件等。
  • 3>部分类与函数
		Create()	duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
			参数 	1>副窗口	2>窗口类的名字(标识)	3>风格(UI_WNDSTYLE_FRAME>厚边框) 	4>风格 
		ShowModal(窗口显示,模态对话框)
		ShowWindal(窗口显示)
		CenterWindow(居中窗口)
			//如下为创建并居中显示窗口
			CDuiFrameWnd duiFrame;
			duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
			duiFrame.CenterWindow();
			duiFrame.ShowModal();
		MessageBox(NULL,_T("测试"),_T("GIF"),IDOK);//测试窗口
	4>消息
		typedef struct tagTNotifyUI 
		{
			CDuiString sType;
			CDuiString sVirtualWnd;
			CControlUI* pSender;
			DWORD dwTimestamp;
			POINT ptMouse;
			WPARAM wParam;
			LPARAM lParam;
		} TNotifyUI;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 5>使用DuiLib注意
    1、 duilib其实并没有区分标题栏和客户区,它的实现方法是屏蔽了系统自带的标题栏,用客户区来模拟标题栏,所以想怎么画就怎么画,非常方便。
    我们首先屏蔽一下系统自带的标题栏,在HandleMessage消息处理函数里屏蔽以下三个消息即可 WM_NCACTIVATE、WM_NCCALCSIZE、WM_NCPAINT。

  • 6>重写消息
    1. WindowImplBase下的 virtual void Notify(TNotifyUI& msg);重写
    2. WindowImplBase下的 virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);重写

  • 7>win32:获取文件路径窗口

  • 8>向CMD窗口发送命令(使用ffmpeg库,转到库目录下,使用如下cmd命令)
    1. 使用图片生成gif
    ffmpeg -r 1 -i .\Pictrue\%d.jpg 11.gif //-r(参数选项) 1(控制图片速度,值越大图片播放越快) -i(数据来源) .(当前目录)
    2. 使用视频生成gif
    (1)视频的截取
    ffmpeg -ss 00:00:15 -to 00:00:25 -i input.mp4 -vcodec copy -acodec copy output.mp4 //从15秒截取到25秒 --vcodec视频文件拷贝 -acodec音频文件拷贝
    (2)提取原视频中的字幕流
    ffmpeg -i output.mkv -an -vn -scodec copy sub3.ass
    (3)对提取到的字幕流进行编辑
    (4)将字幕流烧录到视频文件
    (5)视频生成CIF
    ffmpeg -r 1 -i 1.flv 1.gif //1.flv(原视频的路径) 1.gif(生成视频的路径)
    Dui Desiger
    图片载入
    source 左起,0,右至,高度

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/962592
推荐阅读
相关标签
  

闽ICP备14008679号