关于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);
//换肤一般是需要用观察者模式,因为在一个系统的软件中
//换肤的不仅仅是一个界面,而是一系列的界面,所以点击了