您好,登錄后才能下訂單哦!
最近使用Duilib做了一個簡單的桌面應用,在此做一個簡單的總結,一是為了記錄自己的學習過程,二是對Duilib的使用做一個簡單的總結以便后期使用時查閱。
直接上網站:https://github.com/qdtroy/DuiLib_Ultimate
Github連接
個人理解:
Duilib是Windows系統下基于C++語言的一套開源的桌面應用的UI庫。
從github上直接把×××下來或者拉下來
- 解壓源碼,源碼結構說明如下:
3.使用VS打開項目,如果提示有升級就確認即可
4.第一次打開解決方案會比較慢,只能耐心等待。打開成功以后即可看到項目結構如下圖:
5.查看項目屬性,下載下來的代碼默認使用Unicode字符集,dll方式使用duilib
6.選中duilib項目,右鍵打開菜單,選擇“生成”選項開始生成項目。生成成功以后,會在bin木下生成dll文件。
dll文件的名稱和項目屬性的配置有關,默認生成的dll名稱為:DuiLib_d.dll,同時位于DuiLib_Ultimate\bin目錄下
7.duilib庫編譯生成完成以后,就可以生成demo了。打開demo項目,選中任一項目,并選擇設置為啟動項目,然后選擇生成選項。
8.生成完成以后,啟動運行項目即可看到結果。
特別注意
- 生成的時候可以選擇批生成,批生成就是所有項目全部生成。批生成比較慢,請耐心等待
- 此處之所以選擇設置為啟動項目,目的是為了好調試。選擇批生成以后,所有項目都會生成到bin目錄下。
生成完成以后,即可在bin目錄下查看生成的項目。
??
Duilib的使用有兩種方式,一種是DLL方式,一種是靜態Lib方式
??
1.使用DLL的方式時,DLL需要和應用程序一起發布,同時放在應用程序的目錄下。如果做成安裝包時,需要把DLL也一起安裝了,同時DLL需要注冊。優點在于:應用程序比較小。
?
2.使用靜態Lib時,不需要DLL,但是應用程序比較大。
??
兩種方式均可以使用,至于使用哪種方式還需要結合具體實現的功能討論
?
?
從github上下載的代碼默認使用的就是dll的方式,詳細的使用過程可參考源碼
?
1.編譯出DLL以便使用。在文章的【源碼編譯及Demo運行】已進行詳細介紹。
?
2.使用VS創建一個新的解決方案.創建一個新的解決方案的原因是為了從頭開始搭建一個開發的環境,因此沒有在源碼的基礎上添加工程。
1.文件->新建->項目 【創建一個Win32項目】,使用默認選項創建。
Win32Project1項目即是我們的主項目,我們自己的代碼或者功能就是在此項目內實現的
3.拷貝源碼目錄到我們的項目目錄下
先把DuiLib整個目錄拷貝到新建的解決方案目錄下:
DuiLib_Ultimate\DuiLib ----->Win32Project1
4.刪除VS默認生成的所有代碼。如果報錯的話,刪除不存在的頭文件。保留如下兩項。
?
5.添加一個類: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")); // 設置文字
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 <windows.h>
#include <tchar.h>
#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目錄如下:
??
?
設置工程的lib目錄和lib名稱
?
如果找不到lib時編譯報錯信息如下
?
?
原因是找不到lib文件。
到源碼工程里面找到lib目錄,將里面的文件按照配置復制到我們自己的目錄下。
運行項目,報錯如下:
?
?
把dll文件復制到debug目錄下即可。如果是Release版本的話,則在Release目錄下。此處選擇復制的dll為DuiLib_d.dll。
??
另外,也可以在代碼中設置使用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
不同的名稱可以在編譯源碼時進行修改和設置,如下圖:
?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。