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

被折叠的 条评论
为什么被折叠?



