日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用Duilib做桌面应用总结

發(fā)布時(shí)間:2025/3/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Duilib做桌面应用总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用Duilib做桌面應(yīng)用總結(jié)

最近使用Duilib做了一個(gè)簡(jiǎn)單的桌面應(yīng)用,在此做一個(gè)簡(jiǎn)單的總結(jié),一是為了記錄自己的學(xué)習(xí)過(guò)程,二是對(duì)Duilib的使用做一個(gè)簡(jiǎn)單的總結(jié)以便后期使用時(shí)查閱。

Duilib介紹

直接上網(wǎng)站:https://github.com/qdtroy/DuiLib_Ultimate
Github連接

個(gè)人理解:

  • 是一個(gè)UI庫(kù)
  • 基于C++語(yǔ)言開(kāi)發(fā)
  • 開(kāi)源
  • Windows系統(tǒng),桌面應(yīng)用
  • Duilib是Windows系統(tǒng)下基于C++語(yǔ)言的一套開(kāi)源的桌面應(yīng)用的UI庫(kù)。

    源碼編譯及Demo運(yùn)行

  • 從github上直接把×××下來(lái)或者拉下來(lái)

  • 解壓源碼,源碼結(jié)構(gòu)說(shuō)明如下:
  • 3.使用VS打開(kāi)項(xiàng)目,如果提示有升級(jí)就確認(rèn)即可

    4.第一次打開(kāi)解決方案會(huì)比較慢,只能耐心等待。打開(kāi)成功以后即可看到項(xiàng)目結(jié)構(gòu)如下圖:

    5.查看項(xiàng)目屬性,下載下來(lái)的代碼默認(rèn)使用Unicode字符集,dll方式使用duilib

    6.選中duilib項(xiàng)目,右鍵打開(kāi)菜單,選擇“生成”選項(xiàng)開(kāi)始生成項(xiàng)目。生成成功以后,會(huì)在bin木下生成dll文件。

    dll文件的名稱(chēng)和項(xiàng)目屬性的配置有關(guān),默認(rèn)生成的dll名稱(chēng)為:DuiLib_d.dll,同時(shí)位于DuiLib_Ultimate\bin目錄下

    7.duilib庫(kù)編譯生成完成以后,就可以生成demo了。打開(kāi)demo項(xiàng)目,選中任一項(xiàng)目,并選擇設(shè)置為啟動(dòng)項(xiàng)目,然后選擇生成選項(xiàng)。

    8.生成完成以后,啟動(dòng)運(yùn)行項(xiàng)目即可看到結(jié)果。

    特別注意

  • 生成的時(shí)候可以選擇批生成,批生成就是所有項(xiàng)目全部生成。批生成比較慢,請(qǐng)耐心等待
  • 此處之所以選擇設(shè)置為啟動(dòng)項(xiàng)目,目的是為了好調(diào)試。選擇批生成以后,所有項(xiàng)目都會(huì)生成到bin目錄下。
  • 生成完成以后,即可在bin目錄下查看生成的項(xiàng)目。

    Duilib使用介紹

    ??
    Duilib的使用有兩種方式,一種是DLL方式,一種是靜態(tài)Lib方式
    ??

    1.使用DLL的方式時(shí),DLL需要和應(yīng)用程序一起發(fā)布,同時(shí)放在應(yīng)用程序的目錄下。如果做成安裝包時(shí),需要把DLL也一起安裝了,同時(shí)DLL需要注冊(cè)。優(yōu)點(diǎn)在于:應(yīng)用程序比較小。
    ?
    2.使用靜態(tài)Lib時(shí),不需要DLL,但是應(yīng)用程序比較大。
    ??

    兩種方式均可以使用,至于使用哪種方式還需要結(jié)合具體實(shí)現(xiàn)的功能討論

    ?

    DLL方式使用介紹

    ?
    從github上下載的代碼默認(rèn)使用的就是dll的方式,詳細(xì)的使用過(guò)程可參考源碼
    ?

    1.編譯出DLL以便使用。在文章的【源碼編譯及Demo運(yùn)行】已進(jìn)行詳細(xì)介紹。

    ?

    2.使用VS創(chuàng)建一個(gè)新的解決方案.創(chuàng)建一個(gè)新的解決方案的原因是為了從頭開(kāi)始搭建一個(gè)開(kāi)發(fā)的環(huán)境,因此沒(méi)有在源碼的基礎(chǔ)上添加工程。

    1.文件->新建->項(xiàng)目 【創(chuàng)建一個(gè)Win32項(xiàng)目】,使用默認(rèn)選項(xiàng)創(chuàng)建。


    Win32Project1項(xiàng)目即是我們的主項(xiàng)目,我們自己的代碼或者功能就是在此項(xiàng)目?jī)?nèi)實(shí)現(xiàn)的

    3.拷貝源碼目錄到我們的項(xiàng)目目錄下

    先把DuiLib整個(gè)目錄拷貝到新建的解決方案目錄下:

    DuiLib_Ultimate\DuiLib ----->Win32Project1

    4.刪除VS默認(rèn)生成的所有代碼。如果報(bào)錯(cuò)的話,刪除不存在的頭文件。保留如下兩項(xiàng)。

    ?

    5.添加一個(gè)類(lèi):CDuiFrameWnd,如果生成cpp文件可刪除。代碼如下
    ?

    #pragma once
    #include <UIlib.h>
    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")); // 設(shè)置文字pWnd->SetBkColor(0xFF00FF00); // 設(shè)置背景色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;
    };

    **現(xiàn)在要解決報(bào)錯(cuò)的問(wèn)題,原因是找不到頭文件,因此我們要設(shè)置頭文件所在路徑****1.打開(kāi)項(xiàng)目屬性選項(xiàng)->VC++選項(xiàng)->配置include目錄和庫(kù)目錄**![](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.首先設(shè)置include目錄,include目錄為duilib的根目錄,推薦使用相對(duì)路徑配置,此處為:../DuiLib 添加以后已經(jīng)不報(bào)錯(cuò)了**![](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函數(shù)所在文件,此示例中為:Win32Project1.cpp**```c++#include "stdafx.h"#include <windows.h> #include <tchar.h> #include "DuiFrameWnd.h" //本次添加int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {// 一下內(nèi)容為本次修改CPaintManagerUI::SetInstance(hInstance);CDuiFrameWnd duiFrame;duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);duiFrame.ShowModal();return 0; }

    我們?cè)诠こ棠夸浵滦陆ㄒ粋€(gè)目錄為lib。從源碼編譯的目錄里面拷貝文件到lib目錄下,如果嫌麻煩可以全部一起拷貝。
    ?
    使用dll方式時(shí),dll和應(yīng)用程序要放在同一個(gè)目錄下,因此我們把源碼編譯后bin目錄下的:DuiLib****.dll的文件全部也拷貝到lib目錄下,以便使用。
    ?
    拷貝完成后的lib目錄如下:
    ??

    ?

    設(shè)置工程的lib目錄和lib名稱(chēng)
    ?

    如果找不到lib時(shí)編譯報(bào)錯(cuò)信息如下
    ?
    ?

    原因是找不到lib文件。
    到源碼工程里面找到lib目錄,將里面的文件按照配置復(fù)制到我們自己的目錄下。

    運(yùn)行項(xiàng)目,報(bào)錯(cuò)如下:
    ?

    ?

    把dll文件復(fù)制到debug目錄下即可。如果是Release版本的話,則在Release目錄下。此處選擇復(fù)制的dll為DuiLib_d.dll。


    ??

    另外,也可以在代碼中設(shè)置使用lib

    在DuiFrameWnd.h文件中添加如下宏定義,那么會(huì)根據(jù)不同的配置使用不同lib,同樣的也需要拷貝對(duì)應(yīng)的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

    不同的名稱(chēng)可以在編譯源碼時(shí)進(jìn)行修改和設(shè)置,如下圖:

    ?

    靜態(tài)Lib方式使用介紹

    使用總結(jié)

    轉(zhuǎn)載于:https://blog.51cto.com/1423357/2090630

    總結(jié)

    以上是生活随笔為你收集整理的使用Duilib做桌面应用总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。