文章目录
DuiLib库
介绍:
DuiLib(第三方库,应用窗口美化,逻辑操作与界面分离,用XML文档进行界面编辑)(DUI与GUI/VUI的对比)
概念与定义:
DuiLib库是轻量级的C++界面开发库。duilib并没有像MFC那样把所有的东西全包了,它仅仅包装了UI部分而已,其他的还是需要用win32、MFC的知识,所以除了UI部分,其他的都和duilib没有关系。
逻辑操作与界面分离了。
DuiLib库优点与缺陷:
优点:
- 基于GDI在窗口上自绘,无其他依赖,未使用特殊或危险的系统调用,能够很好的解决传统MFC界面的一系列问题。
- 使用XML来描述界面风格,界面布局,将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色,换肤,透明等。
- 完全兼容ActiveX控件(如常见的IE控件和Flash),也可以和MFC等界面库配合使用。
- 可广泛用于互联网客户端、工具软件客户端、管理系统客户端、多媒体客户端(如KTV、触摸屏)、车载电脑系统、gps系统和手机客户端软件等。
缺陷:
- 没有帮助文档
- 后期没有进行维护
使用
环境配置:
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 的遗留参数。
启动代码调用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在同一目录)
进阶使用&相关基础
Win32应用程序流程
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;
-
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,右至,高度