当前位置:   article > 正文

duilib入门教程_duilib菜鸟教程

duilib菜鸟教程

https://www.cnblogs.com/lzm-cn/p/11422558.html

duilib使用手册

1.简介#

duilib是一个开源 的directui 界面库,使用XML来描述界面风格,界面布局,将界面与逻辑分离,能够快速开发美观的界面。

2.代码下载与编译#

2.1代码下载#

github网址:https://github.com/duilib/duilib
下载后的代码结构如下:

文件结构

2.2编译#

打开根目录的Duilib.sln,github上的工程是VS2013的,使用VS2017打开时,会提示升级工程,点升级即可。如果没有升级成功,在工程配置中修改如下选项,选择win10的sdk和VS2017的工具集。

sdk与工具集修改

按照如下要求修改文件编码,解决由于编码格式的问题会导致vs2017下编码失败的问题。
修改文件编码

根据实际需求,选择对应的工程配置,静态库或者动态库,Unicode或者多字节等等。

工程配置

工程配置

选择好工程配置之后,编译工程DuiLib即可。
注意:生成duilib静态库时,需要添加预编译宏UILIB_STATIC

3.使用#

3.1库链接与头文件包含#

使用duilib界面库,可以分为动态链接和静态链接两种方式。

1.静态链接
工程配置中添加对duilib.lib静态库的链接,并且添加预定义宏UILIB_STATIC

2.动态链接
将生成的duilib.dll拷贝到输出文件的同级目录下,同时添加对导入库duilib.lib的静态链接。

3.头文件
将如下标记的文件和文件夹拷贝,使用时包含UIlib.h文件即可。

需要拷贝的文件

3.2代码中的使用#

duilib提供了一个封装类WindowImplBase,从该类继承,并重写部分函数即可,详情参考demo代码:

  
  
Copy
#include "..\DuiLib\UIlib.h"
  • 1
  • 2

#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

using namespace DuiLib;

class TestFrame : public WindowImplBase
{
public:
TestFrame(){}
~TestFrame(){}

<span class="hljs-function"><span class="hljs-keyword">virtual</span> CDuiString <span class="hljs-title">GetSkinFolder</span><span class="hljs-params">()</span>
</span>{
    <span class="hljs-keyword">return</span> _T(<span class="hljs-string">""</span>);
}
<span class="hljs-function"><span class="hljs-keyword">virtual</span> CDuiString <span class="hljs-title">GetSkinFile</span><span class="hljs-params">()</span>
</span>{
    <span class="hljs-keyword">return</span> _T(<span class="hljs-string">"demo.xml"</span>);
}
<span class="hljs-function"><span class="hljs-keyword">virtual</span> LPCTSTR <span class="hljs-title">GetWindowClassName</span><span class="hljs-params">(<span class="hljs-keyword">void</span>)</span> <span class="hljs-keyword">const</span>
</span>{
    <span class="hljs-keyword">return</span> _T(<span class="hljs-string">"TestWindowClass"</span>);
}
<span class="hljs-function"><span class="hljs-keyword">virtual</span> LRESULT <span class="hljs-title">OnClose</span><span class="hljs-params">(UINT <span class="hljs-comment">/*uMsg*/</span>, WPARAM <span class="hljs-comment">/*wParam*/</span>, LPARAM <span class="hljs-comment">/*lParam*/</span>, BOOL&amp; bHandled)</span>
</span>{
    PostQuitMessage(<span class="hljs-number">0</span>);
    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}

<span class="hljs-function"><span class="hljs-keyword">virtual</span> <span class="hljs-keyword">void</span> <span class="hljs-title">Notify</span><span class="hljs-params">(TNotifyUI&amp; msg)</span>
</span>{
    <span class="hljs-keyword">if</span> (msg.sType == _T(<span class="hljs-string">"click"</span>))
    {
        <span class="hljs-keyword">if</span> (msg.pSender-&gt;GetName() == _T(<span class="hljs-string">"buttonName1"</span>))
        {
            ::MessageBox(<span class="hljs-literal">NULL</span>, _T(<span class="hljs-string">"buttonName1 has been clicked"</span>), _T(<span class="hljs-string">""</span>), <span class="hljs-literal">NULL</span>);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

private:

};

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /hPrevInstance/, LPSTR /lpCmdLine/, int nCmdShow)
{
CPaintManagerUI::SetInstance(hInstance);

HRESULT Hr = ::CoInitialize(<span class="hljs-literal">NULL</span>);
<span class="hljs-keyword">if</span> (FAILED(Hr)) <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;

TestFrame* pFrame = <span class="hljs-keyword">new</span> TestFrame();
<span class="hljs-keyword">if</span> (pFrame == <span class="hljs-literal">NULL</span>) <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
pFrame-&gt;Create(<span class="hljs-literal">NULL</span>, _T(<span class="hljs-string">"TestWindow"</span>), UI_WNDSTYLE_FRAME, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>);
pFrame-&gt;CenterWindow();
::ShowWindow(*pFrame, SW_SHOW);

CPaintManagerUI::MessageLoop();

::CoUninitialize();
<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

}

对应的xml布局文件:

 
 
Copy
<?xml version="1.0" encoding="UTF-8"?> <Window size="600,360"> <VerticalLayout bkcolor="0xFF87CEEB"> <Control /> <HorizontalLayout height="40"> <Control /> <Button name="button1" text="button1" width="80" height="40" bkcolor="0xFF228B22" /> <Control /> </HorizontalLayout> <Control /> </VerticalLayout> </Window>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

运行结果:

运行结果

关于duiliib的详细用法,可以参考源码工程中的demo,基本列举了所有控件的用法,包括各种布局情况。也可以参考博客:
duilib布局详解
duilib属性列表

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号