成都网站建设设计

将想法与焦点和您一起共享

使用Duilib做桌面应用总结

使用Duilib做桌面应用总结

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

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名申请、网络空间、营销软件、网站建设、江阳网站维护、网站推广。

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目录和库目录**
  
![](/upload/otherpic50/b7fcee772f8ad720d4159a5d650731c5.jpg)

 
**2.首先设置include目录,include目录为duilib的根目录,推荐使用相对路径配置,此处为:../DuiLib 添加以后已经不报错了**
  
![](/upload/otherpic50/cdc5b6300b141493e3df047e2fbcbcfe.jpg)

 
**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方式使用介绍

使用总结


标题名称:使用Duilib做桌面应用总结
新闻来源:http://chengdu.cdxwcx.cn/article/gdhooc.html