DirectUI 是一種繞過傳統 GDI/GDI+ 繪圖,直接調用底層繪圖 API(如 Direct2D、DirectWrite、GDI+)實現自定義界面渲染的技術。它不依賴標準 Windows 控件,擁有極高的界面定制靈活性。
| 項目類型 | 適用場景 | 優點 | 缺點 |
|---|---|---|---|
| Win32 空項目 | 純 C/C++,追求極致性能、體積最小、無運行時依賴 | 完全控制消息循環、繪圖管線;無 MFC 開銷 | 需手動實現窗口類註冊、消息泵、資源管理;開發效率低 |
| MFC 應用程序 | 需要文檔/視圖架構、資源管理、現有 MFC 代碼遷移 | 類庫封裝豐富;資源編輯器支持;調試方便 | 引入 MFC 運行時庫;類結構相對固定,定制需繼承重寫 |
| WTL 項目 | 輕量級 ATL 模板庫,介於 Win32 和 MFC 之間 | 無運行時依賴;模板元編程靈活;二進制體積小 | 學習曲線陡峭;社區資源較少 |
| C# Windows Forms / WPF | 托管代碼開發,快速構建原型 | 開發效率極高;豐富的第三方 UI 庫 | 非原生 DirectUI;需 P/Invoke 或混合模式調用底層繪圖 |
git clone https://github.com/duilib/duilib.gitduilib_vc2019.sln 編譯生成 DuiLib_d.lib / DuiLib_u.libDuiLib_u.lib#include "UIlib.h"
using namespace DuiLib;
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR, int nCmdShow)
{
CPaintManagerUI::SetInstance(hInstance);
CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());
CWindowWnd* pFrame = new CWindowWnd();
pFrame->Create(NULL, _T("DirectUI Demo"), UI_WNDSTYLE_FRAME, 0, 0, 0, 800, 600);
pFrame->CenterWindow();
pFrame->ShowWindow(true);
CPaintManagerUI::MessageLoop();
return 0;
}
skin.xml),調用 CDialogBuilder 解析加載。建議從 Duilib 官方 Demo 入手,重點掌握:XML 佈局語法、控件屬性、事件處理(Notify)、自定義控件繼承、皮膚資源管理。網上搜索「Duilib 界面庫使用教程」可找到大量中文視頻與圖文教程。