(5)在DLL中使用DuiLib

轉載自DuiLib中文網 http://www.duilibcn.com/duicreator/98.html


想在DLL中使用DuiLib?好吧,用DuiCreator的DuiLib DLL來快速開始吧。
用DuiCreator新建一個工程,工程類別選擇DUiLib DLL。
 

然後點擊下一步,完成即可。然後點擊編譯按鈕,使用DuiLib的DLL就製作好了。。
來看一下工程做了什麼吧。
cmainwindow.h,cmainwindow.cpp,cmainwindow.xml和以前的工程一樣,分別是頭文件,源文件和窗體文件。
app.rc是DLL的工程版本。
重點是main.cpp

  1. #define WIN32_LEAN_AND_MEAN
  2. #define _CRT_SECURE_NO_SEPRECATE

  3. #include "cmainwindow.h"

  4. #define EXPORT_API __declspec(dllexport)

  5. extern "C" void EXPORT_API ShowDuiWindow()
  6. {
  7.     CPaintManagerUI::SetInstance(NULL);

  8.     WCHAR sExeDir[500];
  9.     memset(sExeDir,0,sizeof(WCHAR)*500);
  10.     ::GetCurrentDirectoryW(500,sExeDir);
  11.     CPaintManagerUI::SetResourcePath(sExeDir);

  12.     CMainWindow* pFrame = new CMainWindow(L"skin",L"CMainWindow.xml");

  13.     pFrame->Create(NULL,L" Hello DuiLib",UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE);
  14.     pFrame->CenterWindow();
  15.     pFrame->ShowWindow();
  16.     CPaintManagerUI::MessageLoop();
  17. }

  18. BOOL APIENTRY DllMain( HANDLE hModule,
  19.                        DWORD  ul_reason_for_call,
  20.                        LPVOID lpReserved
  21.                        )
  22. {
  23.     switch (ul_reason_for_call)
  24.     {
  25.     case DLL_PROCESS_ATTACH:
  26.     {
  27.         break;
  28.     }
  29.     case DLL_THREAD_ATTACH:
  30.     case DLL_THREAD_DETACH:
  31.     case DLL_PROCESS_DETACH:
  32.         break;
  33.     }
  34.     return TRUE;
  35. }
複製代碼
首先包含了窗體類的頭文件#include "cmainwindow.h"
#define EXPORT_API __declspec(dllexport) 定義導出宏
extern "C" void EXPORT_API ShowDuiWindow() 定義導出函數爲ShowDuiWindow()
  1. CPaintManagerUI::SetInstance(NULL);
複製代碼
因爲沒有WinMain函數了,這裏設置爲NULL
  1. CPaintManagerUI::SetResourcePath(sExeDir);
複製代碼
這裏設置一下圖片和XML資源路徑
  1. CMainWindow* pFrame = new CMainWindow(L"skin",L"CMainWindow.xml");
複製代碼
圖片和XML文件在加載它的EXE的skin文件夾下。
  1. pFrame->Create(NULL,L" Hello DuiLib",UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE);
  2. pFrame->CenterWindow();
  3. pFrame->ShowWindow();
  4. CPaintManagerUI::MessageLoop();
複製代碼
創建窗體上級爲NULL,當前也可以爲它設置一個Parent。
  1. CPaintManagerUI::MessageLoop();
複製代碼
開始DuiLib的消息循環。

發佈了33 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章