您的位置:首页 > 产品设计 > UI/UE

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

2015-12-04 20:12 465 查看
转自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文件,双击打开它,

#ifndef CMAINWINDOW_H

#define CMAINWINDOW_H

#include <Windows.h>

#include <objbase.h>

#include <UIlib.h>

using namespace DuiLib;

class CMainWindow : public WindowImplBase

{

public:

CMainWindow(const CDuiString& m_uiFolderName,const CDuiString& sUiFileName);

virtual ~CMainWindow();

void setWindowTitle(const CDuiString& sTitle);

CLabelUI* m_titleLabel;

protected:

virtual LPCTSTR GetWindowClassName() const;

virtual CDuiString GetSkinFile();

virtual void InitWindow();

virtual CDuiString GetSkinFolder();

void OnFinalMessage(HWND hwnd);

virtual CControlUI* CreateControl(LPCTSTR pstrClass);

void Notify(TNotifyUI& msg);

private:

CDuiString m_uiFileName;

CDuiString m_uiFolderName;

CButtonUI* m_minBtn;

CButtonUI* m_maxBtn;

CButtonUI* m_restoreBtn;

CButtonUI* m_closeBtn;

};

#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

#define WIN32_LEAN_AND_MEAN

#define _CRT_SECURE_NO_SEPRECATE

#include "cmainwindow.h"

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

{

CPaintManagerUI::SetInstance(hInstance);

CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());

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

pFrame->Create(NULL,L" Hello DuiLib",UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE);

pFrame->CenterWindow();

pFrame->ShowWindow();

CPaintManagerUI::MessageLoop();

delete pFrame;

return 0;

}

复制代码
首先包含了#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程序了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: