(2)轻松构建DuiLib HelloWorld By DuiCreator(下)

转自DuiLib中文网 http://www.duilibcn.com/duicreator/95.html


在(1)轻松构建DuiLib HelloWorld By DuiCreator(上)中我轻松的用DuiCreator构建了一个DuiLib EXE程序。你可能会有疑问,DuiLib在什么地方?DuiLib在DuiCreator中已经编译好了,默认是静态编译的,因为这样有利于发布我们的程序。它的位置在D:\vc2010\sdk\duilib,里面有链接库和头文件。
编译器使用的是VC2010,之所以使用它是因为VC2010默认编译的程序即可在WindowsXP下运行,不像VC2013那样还需要改link参数。DuiCreator是基于QtCreator构建的,因此它的项目文件管理也是使用qmake,项目管理也可以使用cmake,前提是你的机器已经安装了cmake,并且在path路径中能找到cmake,但是
我没使用过cmake来管理QtCreator的项目,所以这里就不再多说。
 

.pro文件是项目文件,包含了链接文件和头文件搜索路径,源代码的文件列表,exe图标和版本文件app.rc等。
首先要分析的是cmainwindow.h文件,双击打开它,

  1. #ifndef CMAINWINDOW_H
  2. #define CMAINWINDOW_H

  3. #include <Windows.h>
  4. #include <objbase.h>
  5. #include <UIlib.h>
  6. using namespace DuiLib;

  7. class CMainWindow : public WindowImplBase
  8. {
  9. public:
  10.     CMainWindow(const CDuiString& m_uiFolderName,const CDuiString& sUiFileName);

  11.     virtual ~CMainWindow();

  12.     void setWindowTitle(const CDuiString& sTitle);
  13.     CLabelUI* m_titleLabel;

  14. protected:
  15.     virtual LPCTSTR GetWindowClassName() const;

  16.     virtual CDuiString GetSkinFile();

  17.     virtual void InitWindow();
  18.     virtual CDuiString GetSkinFolder();

  19.     void OnFinalMessage(HWND hwnd);

  20.     virtual CControlUI* CreateControl(LPCTSTR pstrClass);
  21.     void Notify(TNotifyUI& msg);

  22. private:
  23.     CDuiString m_uiFileName;
  24.     CDuiString m_uiFolderName;

  25.     CButtonUI* m_minBtn;
  26.     CButtonUI* m_maxBtn;
  27.     CButtonUI* m_restoreBtn;
  28.     CButtonUI* m_closeBtn;
  29. };
  30. #endif // CMAINWINDOW_H
复制代码
可以看到它继承自WindowImplBase,同时有两个参数m_uiFolderName是皮肤文件夹的名称,这里是"skin",在main.cpp里可以看到,sUiFileName是它的XML界面文件。
因为是自绘标题栏,所以它有一个void setWindowTitle(const CDuiString& sTitle);成员函数,
这里为什么还有一个public CLabelUI* m_titleLabel的成员函数呢?
为了对标题栏的控制更加彻底,用m_titleLabel可以控制标题栏的颜色字体等。

void Notify(TNotifyUI& msg);函数已经被构建,可以响应界面内控件的某些事件。
virtual CControlUI* CreateControl(LPCTSTR pstrClass); 也已被构建,用它可以实现自绘控件功能。

再看main.cpp

  1. #define WIN32_LEAN_AND_MEAN
  2. #define _CRT_SECURE_NO_SEPRECATE

  3. #include "cmainwindow.h"

  4. int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
  5. {
  6.     CPaintManagerUI::SetInstance(hInstance);
  7.     CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());

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

  9.     pFrame->Create(NULL,L" Hello DuiLib",UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE);
  10.     pFrame->CenterWindow();
  11.     pFrame->ShowWindow();

  12.     CPaintManagerUI::MessageLoop();
  13.     delete pFrame;
  14.     return 0;
  15. }
复制代码
首先包含了#include "cmainwindow.h"头文件

CPaintManagerUI::SetInstance(hInstance);
CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());
这两句就无需多解释了,设置资源路径。

CMainWindow* pFrame = new CMainWindow(L"skin",L"CMainWindow.xml");
这句创建了一个实例类,两个参数分别是皮肤文件夹路径和XML界面文件
pFrame->CenterWindow();窗口居中
pFrame->ShowWindow();显示窗体
CPaintManagerUI::MessageLoop();消息循环


项目切换到release,然后重新编译项目,在项目设置里可以看到构建目录,打开它,进入到release目录
是不是看到编译好的EXE了呢?,skin为皮肤目录,把生成EXE和skin文件夹拷贝给我们的小伙伴,他们是否能运行呢?
应该是可以的,因为我们使用静态编译的DuiLib和/MT编译的程序。

 
项目中app.rc为EXE的版本和版权文件,包含了EXE的图标ico文件,修改它们,你也可以制作属于自己的DuiLib程序了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值