设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

12DUILib经典教程(实例)(3)

发布时间:2020-12-24 09:17 所属栏目:117 来源:网络整理
导读:Duilib是一个以贴图为主要表现手段的界面库,实现换肤非常简单,可以通过给控件设置不同的图片来实现换肤,比如给需要换肤的控件调用CControlUI::SetBkImage。但是针对换肤功能,Duilib提供了更为简单的方法,即使

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对话框。

杭州月牙儿网络

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读