使用Duilib的一些技术

动态换肤

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

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

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

      CPaintManagerUI::ReloadSkin();

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

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 APIENTRYWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/,int nCmdShow)

{

   CManager::SetInstance(hInstance);

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

   CManager::LoadPlugin(PLUGINNAME);

// ……

}

资源打包

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

    进入资源目录,然后使用具备zip压缩功能的软件(如winrar、winzip、7zip等)把布局xml和图片等资源压缩到一个zip文件包里。

    在WinMain函数中CPaintManagerUI::SetInstance(hInstance)的后面加入CPaintManagerUI::SetResourceZip(_T("xxx.zip")),如

int APIENTRYWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/,int nCmdShow)

{

     CManager::SetInstance(hInstance);

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

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

     // ……

}


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



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值