加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

12DUILib经典教程(实例)

发布时间:2020-12-24 14:43:58 所属栏目:Windows 来源:网络整理
导读:Duilib经典实例教程;1基本框架;一个简单的Duilib程序一般是下面这个样子的:;//Duilib使用设置部分;#pragmaonce;#defineWIN32_LEAN_AND_ME;#define_CRT_SECURE_NO_DE;#includewindows.h;#includeobjbase.h;#include Duilib经典实例教程 1 基本框架

Duilib是一个以贴图为主要表现手段的界面库,实现换肤非常简单,可以通过给控件设置不同的图片来实现换肤,比如给需要换肤的控件调用CControlUI::SetBkImage。但是针对换肤功能,Duilib提供了更为简单的方法,即使用CPaintManagerUI::ReloadSkin。

假设我们给程序创建了两套皮肤,分别打包成skin1.zip和skin2.zip,在程序运行的时候,执行:

CPaintManagerUI::SetResourceZip(_T("skin2.zip")); // 或者skin1.zip

CPaintManagerUI::ReloadSkin();

这样简单的两行代码,就实现了全部窗口从skin1皮肤到skin2皮肤的切换。你也可以随时再次调用上面两行代码,把皮肤切换回去。

7 Dll插件

? Duilib支持使用外部dll来扩展控件: 在dll中,只需要实现一个接口CreateControl,如

extern "C" __declspec(dllexport) CControlUI* CreateControl(LPCTSTR pstrType)

{

if( _tcscmp(pstrType,_T("ButtonEx")) == 0 ) return new CButtonExUI;

return NULL;

}

? 在使用程序中,需要在WinMain函数把插件dll使用CPaintManagerUI::LoadPlugin

加载进来,然后就可以和内置控件一样使用了。

int APIENTRY WinMain(HINSTANCE hInstance,int nCmdShow)

{

CManager::SetInstance(hInstance);

CManager::SetResourcePath(CManager::GetInstancePath());

CManager::LoadPlugin(PLUGINNAME);

// ……

}

8 资源打包

Duilib使用资源打包功能非常简单,在程序开发完成后只需做两个步骤即可:

? 进入资源目录,然后使用具备zip压缩功能的软件(如winrar、winzip、7zip等)把

布局xml和图片等资源压缩到一个zip文件包里。

?

?在WinMain函数中CPaintManage;CPaintManagerUI::SetReso;intAPIENTRYWinMain(HINST;CManager::SetInstance(hI;CManager::SetResourcePat;CPaintManagerUI::SetReso;//……;这样就完成了资源打包功能,发布程序只需要把exe;


? 在WinMain函数中CPaintManagerUI::SetInstance(hInstance)的后面加入

CPaintManagerUI::SetResourceZip(_T("xxx.zip")),如

int APIENTRY WinMain(HINSTANCE hInstance,int nCmdShow)

{

CManager::SetInstance(hInstance);

CManager::SetResourcePath(CManager::GetInstancePath());

CPaintManagerUI::SetResourceZip(_T("xxx.zip"));

// ……

}

这样就完成了资源打包功能,发布程序只需要把exe、dll和zip文件带上就行了。有时为了需要,也可以修改.zip为其他扩展名,比如.dat。

9 Duilib在MFC或WTL程序中的应用

MFC和WTL依托强大的Windows Common Controls实现和十多年的发展,在传统软件界面领域占了统治地位,很多的现有软件代码都是使用MFC(或WTL,下同,不再特别注明)写的。所以对于一个界面库来说,兼容MFC和WTL显的非常重要。

如果一个软件希望从MFC界面转换到Duilib,或者打算使用Duilib做界面,但是又希望使用MFC的其他功能,这时Duilib和MFC混合使用就派上用场了。

在MFC中使用Duilib,可以按以下步骤操作:

? 在BOOL CXXXApp::InitInstance()函数中,添加

杭州月牙儿网络

DuiLib::CManager::SetInstance(CWinAppEx::m_hInstance);

DuiLib::CManager::SetResourcePath(DuiLib::CManager::GetInstancePath()); 注意需要添加在MFC窗口创建之前。

? 创建Duilib窗口类

class CDuiWnd : public DuiLib::CWindowWnd,public DuiLib::INotifyUI {

public:

CDuiWnd();

LPCTSTR GetWindowClassName() const;

UINT GetClassStyle() const;

void Notify(DuiLib::TNotifyUI& msg);

LRESULT HandleMessage(UINT uMsg,LPARAM lParam);

public:

DuiLib::CPaintManager m_manager;

};

? 在MFC窗口类中创建Duilib窗口

m_duiWnd.Create(*this,UI_WNDSTYLE_CHILD,642,520); m_duiWnd.Init();

m_duiWnd是MFC窗口类的成员变量。

杭州月牙儿网络

示例:绿色框内是Duilib窗口,外层是MFC对话框。

杭州月牙儿网络

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读