Duilib 换肤

来源:互联网 发布:233什么意思网络用语 编辑:程序博客网 时间:2024/05/19 07:42

关于Duilib的换肤问题:

首先需要在xml文件中定义一个控件(一般是布局),下面代码的取名叫bg

<HorizontalLayout name="bg" bkimage="file='bg0.png' corner='600,200,1,1'" hole="true">

接下来在c++的事件代码中,对应的事件处理函数中加入如下代码就能实现换肤功能了:

if (_tcsicmp(msg.pSender->GetName(), "bg") == 0){CControlUI* background = m_PaintManager.FindControl("bg");if (background != NULL){TCHAR szBuf[MAX_PATH] = {0};++bk_image_index_;if (kBackgroundSkinImageCount < bk_image_index_)bk_image_index_ = 0;_stprintf_s(szBuf, MAX_PATH - 1, _T("file='bg%d.png' corner='600,200,1,1'"), bk_image_index_);//设置背景图片background->SetBkImage(szBuf);//换肤一般是需要用观察者模式,因为在一个系统的软件中//换肤的不仅仅是一个界面,而是一系列的界面,所以点击了//换肤按钮时,不仅需要换当前的页面,还需要换其他的页面//所以使用观察者模式通知其他所有的观察者进行页面的更新//观察者模式需要传递的参数// SkinChangedParam param;// CControlUI* background = m_PaintManager.FindControl(kBackgroundControlName);// if (background != NULL)// {// param.bkcolor = background->GetBkColor();// if (_tcslen(background->GetBkImage()) > 0)// {// _stprintf_s(szBuf, MAX_PATH - 1, _T("bg%d.png"), bk_image_index_);// }// // param.bgimage = szBuf;// }//观察者模式,具体代码省略,就是观察者模式有关的代码 //skin_changed_observer_.Broadcast(param);}}


0 0
原创粉丝点击