UI引擎开发系列(四) 消息机制

本文介绍了一个自定义消息处理机制的实现方式,包括如何在视图获取或失去焦点时触发相应的方法,以及如何通过消息机制更新天气纹理。该机制利用了单例模式,并通过消息传递实现了视图间的解耦。

自定义消息的控制

#pragma once
#include "Component/CTSingleton.h"
#include "Component/CBaseView.h"
#include "Component/CViewNodeGroup.h"
#include "CUIViewNode.h"
#include "IMessageListener.h"

using namespace tcl;

//Home view
class CHomeView : public CViewNodeGroup,public CTSingleton<CHomeView>, public IMessageListener
{
public:
	CHomeView();
	//当某一个View获取focus时,执行onGetFocus,丢失focus时执行onLoseFocus
	virtual void onGetFocus();
	virtual void onLoseFocus();

private:
	//主页面的页面切换动画
	CAnimationPlayer* m_pHomeAnmPlayer;
	//子view列表
	core::array<CUIViewNode*> m_ViewNodes;
	
	ISceneNode* m_pTitleFocus;
	ISceneNode* m_pTitle;
	ISceneNode* m_HomeParent;

	//消息的接收与处理函数,源自何方,主题是什么,处理的参数
        virtual strArray onMessage(core::stringc from,core::stringc subject, strArray& param);
	//单例实现
	CT_DECLARE_SINGLETON(CHomeView)
	
};



消息处理的例子,更新天气

//CHomeView接受消息
strArray CHomeView::onMessage(core::stringc from,core::stringc subject, strArray& param)
{
	strArray ret;
	//如果标题是设置天气纹理 而且有参数
	if(subject == "SetWeatherTexture" && param.size()>0)
	{
		//通过这个接口,获取已存在的纹理为智能指针
		TexturePtr weatherptr = TextureGen::getTexture(param[0]);
		//获取纹理需要贴的那个物体
		ISceneNode* title = CommonTools::getISceneNodeByName("01001");
		//如果纹理物体都没问题,就贴在物体的第0层上
		if(weatherptr && title)
		{			
			title->setMaterialTexture(0,weatherptr);
		}
	}

	return ret;
}



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值