⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 appframe.h

📁 用VC在BREW平台上开发的手机游戏Superball的源代码
💻 H
字号:
/*
 *  BREW Extension Library
 *  Copyright (c) 2003-2005 ANYSOFT.CN 
 *  All Rights Reserved.
 */

/*!-----------------------------------
	@file		
	@brief		[AppFrame] 应用程序框架

	应用程序的基础框架,采用数据模型-视图-控制器模式(Model-View-Controller)
	实现了基本的完整的AEE事件处理流程,是其它模块的基础
  -----------------------------------*/

#ifndef __BEL_APPFRAME_H__
#define __BEL_APPFRAME_H__

/*!
	@defgroup	AppFrame AppFrame Module/应用程序框架模块
 */

#include <AEE.h>
#include <AEEAppGen.h>
#include "BEL.h"
#include "Diagnosis.h"
#include "Helper.H"

//! 最多同时支持的数据-视图对数
#define MAX_VIEW_COUNT 20

#define NO_ACTIVE_PAIR (byte)255
#define INVALID_ID	-1
#define TIMER_SUSPEND_ALL	-1	
#define TIMER_ALL			255


/*!
	@ingroup	AppFrame
	@brief	EventHandler对特定类别事件的处理情况
 */
enum ETStatus
{
	ET_NOT_RECOGNIZED = 0, //!< 事件不属于这一类别
	ET_PROCESSED = 1, //!< 事件属于这一类别,被处理
	ET_NOT_PROCESSED = -1 //!< 事件属于这一类别,但未被处理
};

/*!
	@ingroup	AppFrame
	@brief	所有具备处理事件能力的类的公共接口

	按照BREW SDK的定义(参见AEE.h),事件被分为8类,依次为:
	<ol>
		<li>App Event</li>
		<li>Key Event</li>
		<li>Control Event</li>
		<li>Dialog Event</li>
		<li>Shell Event</li>
		<li>Device Event</li>
		<li>Clipboard Event</li>
		<li>User Event</li>
	</ol>
 */
class EvtTarget : public BREWObj
{
public:
	EvtTarget();
	virtual ~EvtTarget();
	virtual boolean OnEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	virtual ETStatus HandleAppEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	virtual ETStatus HandleKeyEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	virtual ETStatus HandleControlEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	virtual ETStatus HandleDialogEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	virtual ETStatus HandleShellEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	virtual ETStatus HandleDeviceEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	virtual ETStatus HandleClipboardEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	virtual ETStatus HandleUserEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	virtual int8 AddRef(); 
	virtual int8 GetRefCount();
	virtual int8 ReduceRef();

private:
	int8 m_RefNum;
};

class AppArbiter;

/*!
	@ingroup	AppFrame
	@brief	数据模型类
	
	定义了所有应用程序使用的数据模型的基类
*/
class AppData : public EvtTarget
{
public:
	AppData(AEEApplet *app);
	virtual ~AppData();
	
	void			SetArbiter(AppArbiter * arbiter);
	AppResult		Notify(int32 status = NULL);
	AEEApplet*		GetApp() { return m_app;}
	AEEDeviceInfo*	GetDeviceInfo();
	
protected:
	AppArbiter *	m_arbiter;
	AEEApplet *		m_app;
	AEEDeviceInfo	m_di;
};

class VisibleObj : public EvtTarget
{
public:
	virtual AppResult Open() = 0;
	virtual AppResult Close() = 0;	
	virtual AppResult Enable() = 0;
	virtual AppResult Disable() = 0;
};

/*!
	@ingroup	AppFrame
	@brief	数据视图类

	本类是所有屏幕表现层类的基类,定义了虚方法的接口
 */
class AppView : public VisibleObj
{
public:
	AppView(AEEApplet *app);
	virtual ~AppView();

	void				SetArbiter(AppArbiter * arbiter);
	virtual AppResult	Update() = 0;
	AppData*			GetData();

protected:
	AppArbiter *		m_arbiter;
	AEEApplet *			m_app;
	AppData *			m_data;
};

/*!
		@brief		Timer回调函数	
		@param		btTimerID		到时的Timer的ID
		@param		pvParam			用户指定的指针
		@return		
 */
typedef void (*PTIMERPROC)(byte btTimerID,void* pvParam);	


/*!
	@ingroup	AppFrame
	@brief		由于描述Timer信息的类

 */
class TimerInfo:public BREWObj
{
public:
	byte		m_btID;
	byte		m_btOwnerID;
	int32 		m_dwMSecs;
	PTIMERPROC 	m_pTimerProc;
	void* 		m_pvParam;
	AEEApplet*	m_pApp;
	boolean		m_bSend;
	boolean		m_bRunning;
public:
	void		Start();
	void		Stop();
	TimerInfo();
};

typedef TimerInfo* PTimerInfo;

#define CS_FILE_SYSTEM			0x00000001

#define CS_ERROR_OK				0x00000000
#define CS_ERROR_FILE_NO_SPACE	0x00000001
#define CS_ERROR_UNKNOWN		0xffffffff	

//-----------Add by tan---------//
#define MAX_FILENAME	32

class CDialog;
typedef CDialog* PCDialog;
//------------Ended add---------//


/*!
	@ingroup	AppFrame
	@brief	程序框架的控制器

	AppArbiter维护一个数据-视图对的列表,并根据当前活动的数据-视图对情况分发来自BREWApp的事件
 */
class AppArbiter : public EvtTarget  
{
public:
	AppArbiter(AEEApplet *app);
	virtual ~AppArbiter();

	AppResult			RegisterData(AppData* data);
	AppResult			RegisterView(byte index, AppView *view, boolean setActive = false);
	virtual boolean		OnEvent(AEEEvent evtCode, uint16 param16, uint32 param32);

	AppData*			GetData();
	byte				GetViewCount();
	AppView *			GetActiveView();
	AppView *			GetViewByID(byte index);
	byte				GetActiveViewID();

	AppResult			Arbit(byte index, boolean freePrev = FALSE);
	virtual AppResult	Notify(int32 status) = 0;

	boolean				SetTimer(byte btID, byte btOwnerID, int32 dwMSecs, PTIMERPROC	pProc,
						void*		pvParam,
						boolean		bStartNow=FALSE,
						boolean     bSend = TRUE);
	boolean				KillTimer(byte btTimerID);
	void				KillAllTimers();
	void				ToggleTimers(byte btActiveView);
	static void			OnTimer(PTimerInfo pInfo);
	boolean				IsRunning(byte btTimerID);

	uint32				CheckSystem(uint32 dwType,uint16 wParam,uint32 dwParam);
	//----------Add by tan-------------//
	AEEApplet*			GetApp() {return m_app;};
	const char*			GetResFile() {return m_szResFile;}
	void				SetResFile(const char* pszFileName) {MEMCPY(m_szResFile,pszFileName,sizeof(m_szResFile));}

public:
	char				m_szResFile[MAX_FILENAME+1];
	//-----------Ended add-------------//

protected:
	void				HandleError(AEEEvent evtCode, uint16 param16, uint32 param32);
protected:
	uint32				m_dwErrorCode;
	byte				m_viewCount;
	byte				m_activeViewID;
	AEEApplet*			m_app;
	AppData*			m_data;
	AppView*			m_viewList[MAX_VIEW_COUNT];
	PtrList				m_TimerList;
};

class AppTimer : public BREWObj
{
public:
	uint8 ID;
	AEECLSID CLSID;
	int32 Interval;
	boolean On;
	IShell* m_pIShell;
};

#define MAX_TIMER_COUNT 8

#define DECLARE_INHERIT_FROM_BREWAPP(classname) \
	AppTimer Timers[MAX_TIMER_COUNT];\
	DECLARE_NEW_DELETE()\
	static boolean InitApp(IApplet * applet); \
	static void Finalize(classname * app); \
	static boolean HandleEvent(classname * app, AEEEvent evtCode, uint16 param16, uint32 param32); \
    IShell * GetIShell() { return m_pIShell; }\
	IDisplay * GetIDisplay() { return m_pIDisplay; }\
	IModule * GetIModule() { return m_pIModule; }\
	uint32 GetRefCounter() { return m_nRefs; }\
	AEECLSID GetClassID() { return clsID; }



#define DEFINE_INHERIT_FROM_BREWAPP(classname) \
	boolean classname::InitApp(IApplet *applet) \
	{ \
		ASSERT(applet); \
		return ((classname *)applet)->OnInitApp(); \
	} \
	void classname::Finalize(classname *app) \
	{ \
		ASSERT(app); \
		app->OnFinalize(); \
	} \
	boolean classname::HandleEvent(classname *app, AEEEvent evtCode, uint16 param16, uint32 param32) \
	{ \
		ASSERT(app); \
		return app->OnEvent(evtCode, param16, param32); \
	} 

#endif




   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -