赞
踩
DuiLib(第三方库,应用窗口美化,逻辑操作与界面分离,用XML文档进行界面编辑)(DUI与GUI/VUI的对比)
DuiLib库是轻量级的C++界面开发库。duilib并没有像MFC那样把所有的东西全包了,它仅仅包装了UI部分而已,其他的还是需要用win32、MFC的知识,所以除了UI部分,其他的都和duilib没有关系。
逻辑操作与界面分离了。
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在同一目录)
1.注册窗口类
2.创建窗口
3.显示窗口&更新窗口
4.消息队列
MFC(将Win32的步骤封装成类,但是界面并不好看)
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,右至,高度
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。