Duilib 换肤

关于Duilib的换肤问题:

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


接下来在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);
			}
		}


你可能感兴趣的:(duilit)