duilib使用手冊
1.簡介
duilib是一個開源 的directui 界面庫,使用XML來描述界面風格,界面布局,將界面與邏輯分離,能夠快速開發美觀的界面。
2.代碼下載與編譯
2.1代碼下載
github網址:https://github.com/duilib/duilib 下載后的代碼結構如下:
2.2編譯
打開根目錄的Duilib.sln,github上的工程是VS2013的,使用VS2017打開時,會提示升級工程,點升級即可。如果沒有升級成功,在工程配置中修改如下選項,選擇win10的sdk和VS2017的工具集。
按照如下要求修改文件編碼,解決由於編碼格式的問題會導致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代碼:
#include "..\DuiLib\UIlib.h"
#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(){}
virtual CDuiString GetSkinFolder()
{
return _T("");
}
virtual CDuiString GetSkinFile()
{
return _T("demo.xml");
}
virtual LPCTSTR GetWindowClassName(void) const
{
return _T("TestWindowClass");
}
virtual LRESULT OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
PostQuitMessage(0);
return 0;
}
virtual void Notify(TNotifyUI& msg)
{
if (msg.sType == _T("click"))
{
if (msg.pSender->GetName() == _T("buttonName1"))
{
::MessageBox(NULL, _T("buttonName1 has been clicked"), _T(""), NULL);
}
}
}
private:
};
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow)
{
CPaintManagerUI::SetInstance(hInstance);
HRESULT Hr = ::CoInitialize(NULL);
if (FAILED(Hr)) return 0;
TestFrame* pFrame = new TestFrame();
if (pFrame == NULL) return 0;
pFrame->Create(NULL, _T("TestWindow"), UI_WNDSTYLE_FRAME, 0, 0, 0, 0, 0);
pFrame->CenterWindow();
::ShowWindow(*pFrame, SW_SHOW);
CPaintManagerUI::MessageLoop();
::CoUninitialize();
return 0;
}
對應的xml布局文件:
<?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>
運行結果:
關於duiliib的詳細用法,可以參考源碼工程中的demo,基本列舉了所有控件的用法,包括各種布局情況。也可以參考博客: duilib布局詳解 duilib屬性列表