成都创新互联网站制作重庆分公司

使用Duilib做桌面应用总结-创新互联

使用Duilib做桌面应用总结

最近使用Duilib做了一个简单的桌面应用,在此做一个简单的总结,一是为了记录自己的学习过程,二是对Duilib的使用做一个简单的总结以便后期使用时查阅。

专注于为中小企业提供成都网站设计、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业祁门免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

Duilib介绍

直接上网站:https://github.com/qdtroy/DuiLib_Ultimate
Github连接

个人理解:

  1. 是一个UI库
  2. 基于C++语言开发
  3. 开源
  4. Windows系统,桌面应用

Duilib是Windows系统下基于C++语言的一套开源的桌面应用的UI库。

源码编译及Demo运行

  1. 从github上直接把×××下来或者拉下来

  2. 解压源码,源码结构说明如下:

使用Duilib做桌面应用总结

3.使用VS打开项目,如果提示有升级就确认即可

使用Duilib做桌面应用总结

4.第一次打开解决方案会比较慢,只能耐心等待。打开成功以后即可看到项目结构如下图:

使用Duilib做桌面应用总结

5.查看项目属性,下载下来的代码默认使用Unicode字符集,dll方式使用duilib

使用Duilib做桌面应用总结

6.选中duilib项目,右键打开菜单,选择“生成”选项开始生成项目。生成成功以后,会在bin木下生成dll文件。

dll文件的名称和项目属性的配置有关,默认生成的dll名称为:DuiLib_d.dll,同时位于DuiLib_Ultimate\bin目录下

7.duilib库编译生成完成以后,就可以生成demo了。打开demo项目,选中任一项目,并选择设置为启动项目,然后选择生成选项。

使用Duilib做桌面应用总结

8.生成完成以后,启动运行项目即可看到结果。

使用Duilib做桌面应用总结

使用Duilib做桌面应用总结

特别注意

  1. 生成的时候可以选择批生成,批生成就是所有项目全部生成。批生成比较慢,请耐心等待
  2. 此处之所以选择设置为启动项目,目的是为了好调试。选择批生成以后,所有项目都会生成到bin目录下。

使用Duilib做桌面应用总结

生成完成以后,即可在bin目录下查看生成的项目。

使用Duilib做桌面应用总结

Duilib使用介绍


Duilib的使用有两种方式,一种是DLL方式,一种是静态Lib方式
  

1.使用DLL的方式时,DLL需要和应用程序一起发布,同时放在应用程序的目录下。如果做成安装包时,需要把DLL也一起安装了,同时DLL需要注册。优点在于:应用程序比较小。
 
2.使用静态Lib时,不需要DLL,但是应用程序比较大。
  

两种方式均可以使用,至于使用哪种方式还需要结合具体实现的功能讨论

DLL方式使用介绍


从github上下载的代码默认使用的就是dll的方式,详细的使用过程可参考源码
 

1.编译出DLL以便使用。在文章的【源码编译及Demo运行】已进行详细介绍。

2.使用VS创建一个新的解决方案.创建一个新的解决方案的原因是为了从头开始搭建一个开发的环境,因此没有在源码的基础上添加工程。

1.文件->新建->项目 【创建一个Win32项目】,使用默认选项创建。

使用Duilib做桌面应用总结


Win32Project1项目即是我们的主项目,我们自己的代码或者功能就是在此项目内实现的

3.拷贝源码目录到我们的项目目录下

先把DuiLib整个目录拷贝到新建的解决方案目录下:

DuiLib_Ultimate\DuiLib ----->Win32Project1

4.删除VS默认生成的所有代码。如果报错的话,删除不存在的头文件。保留如下两项。

使用Duilib做桌面应用总结

5.添加一个类:CDuiFrameWnd,如果生成cpp文件可删除。代码如下
 

#pragma once
#include
using namespace DuiLib;

class CDuiFrameWnd : public CWindowWnd, public INotifyUI
{
public:
virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); }
virtual void Notify(TNotifyUI& msg) {}

virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    LRESULT lRes = 0;

    if (uMsg == WM_CREATE)
    {
        CControlUI *pWnd = new CButtonUI;
        pWnd->SetText(_T("Hello World"));   // 设置文字
        pWnd->SetBkColor(0xFF00FF00);       // 设置背景色

        m_PaintManager.Init(m_hWnd);
        m_PaintManager.AttachDialog(pWnd);
        return lRes;
    }

    if (m_PaintManager.MessageHandler(uMsg, wParam, lParam, lRes))
    {
        return lRes;
    }

    return __super::HandleMessage(uMsg, wParam, lParam);
}

protected:
CPaintManagerUI m_PaintManager;
};

 
 
**现在要解决报错的问题,原因是找不到头文件,因此我们要设置头文件所在路径**
  

**1.打开项目属性选项->VC++选项->配置include目录和库目录**
  
![](https://s1.51cto.com/images/blog/201803/24/b7fcee772f8ad720d4159a5d650731c5.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

 
**2.首先设置include目录,include目录为duilib的根目录,推荐使用相对路径配置,此处为:../DuiLib 添加以后已经不报错了**
  
![](https://s1.51cto.com/images/blog/201803/24/cdc5b6300b141493e3df047e2fbcbcfe.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

 
**3.修改入口文件也就main函数所在文件,此示例中为:Win32Project1.cpp**
  
```c++

#include "stdafx.h"

#include 
#include 
#include "DuiFrameWnd.h" //本次添加

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
    // 一下内容为本次修改
    CPaintManagerUI::SetInstance(hInstance);

    CDuiFrameWnd duiFrame;
    duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
    duiFrame.ShowModal();
    return 0;
}

我们在工程目录下新建一个目录为lib。从源码编译的目录里面拷贝文件到lib目录下,如果嫌麻烦可以全部一起拷贝。
 
使用dll方式时,dll和应用程序要放在同一个目录下,因此我们把源码编译后bin目录下的:DuiLib****.dll的文件全部也拷贝到lib目录下,以便使用。
 
拷贝完成后的lib目录如下:
  
使用Duilib做桌面应用总结

设置工程的lib目录和lib名称
 
使用Duilib做桌面应用总结

如果找不到lib时编译报错信息如下
 
 

使用Duilib做桌面应用总结

原因是找不到lib文件。
到源码工程里面找到lib目录,将里面的文件按照配置复制到我们自己的目录下。

运行项目,报错如下:
 
使用Duilib做桌面应用总结

把dll文件复制到debug目录下即可。如果是Release版本的话,则在Release目录下。此处选择复制的dll为DuiLib_d.dll。

使用Duilib做桌面应用总结
  

另外,也可以在代码中设置使用lib

在DuiFrameWnd.h文件中添加如下宏定义,那么会根据不同的配置使用不同lib,同样的也需要拷贝对应的dll文件。

#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

不同的名称可以在编译源码时进行修改和设置,如下图:

使用Duilib做桌面应用总结

静态Lib方式使用介绍

使用总结

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:使用Duilib做桌面应用总结-创新互联
文章转载:http://cxhlcq.com/article/dihcdg.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部