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

📄 generalview.h

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

/*!-----------------------------------
	@file		
	@brief		[GeneralView]通用视图模块

				提供了一些通用的视图类,目的在于提高代码的重用性,
				用户只需要利用这些类提供的接口函数正确设置相应的参数
				即可以作为程序中独立的模块使用
	
  -----------------------------------*/

#ifndef __BEL_GENERALVIEW_H__
#define __BEL_GENERALVIEW_H__


/*!
	@defgroup	GeneralView GeneralView Module/通用视图模块
 */


#include "AppFrame.h"
#include "AEEHtmlViewer.h"    // IHtmlViewer interface
#include "Diagnosis.h"	// Added by ClassView
#include "AEEFile.h"
#include "CommonCtl.h"
#include "CommonDef.h"
#include "Sprite2D.h"

#include "IO.H"

#define _TITLE_LEN		8

#ifdef _NAME_LEN
#undef _NAME_LEN
#endif

#define _NAME_LEN		16
#define _SCORE_LEN		32
#define _ITEM_COUNT		6
#define GS_LAST_ONE		-1


#ifndef FILENAME_LENGTH
#define FILENAME_LENGTH 20
#endif
#define  MAX_FILE_SIZE 1024
#define RES_FILE_NAME_LEN		20
#define MENUITEM_MAX_NUMBER	    25
#define FILE_CONTENT_LENGTH 400
#define  STATE_FULL 0
#define  STATE_SHORT 1
#define  USER_NAME_LENGTH 30
#define  TEXTLEN	50





/*!
	@ingroup	GeneralView
	@brief		HtmlView提供了在屏幕上显示磁盘上的html文件的功能。

				支持超级链接跳转,支持长文本自动换行和滚屏
				用途:可以用于帮助和关于窗口
				注意事项:html文件编码方式必须是UTF-8,否则不能显示中文
*/
class HtmlCtlView : public AppView  
{
public:
	
	HtmlCtlView(AEEApplet *app);
	virtual ~HtmlCtlView();
	
	//用户接口
	char* GetFileName();
	void SetFileName(char* FileName);
	
	virtual AppResult Open();
	virtual AppResult Update();
	virtual AppResult Disable();
	virtual AppResult Enable();
	virtual AppResult Close();

	//内部接口
	void FrameViewer();
	IHtmlViewer* GetHtmlCtl();
	IDisplay* GetDisplay();
	AppResult LoadFile(const char* FileName);
	AppResult LoadFileEx(const char *FileName);
	AppResult ChngVerison(IFile* pfile);
	virtual void SetReplace(boolean bReplace);

	virtual ETStatus HandleKeyEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	
	boolean	  m_bReplace;
	boolean	  m_bFinish;
	char m_szFileName[FILENAME_LENGTH];

protected:
	IShell* m_pIShell;
	IDisplay* m_pIDisplay;
    IHtmlViewer* m_pIHtmlViewer;
	
};

static void HViewer_NotifyCB(HtmlCtlView *pme, HViewNotify *phvn);





/*!
	@ingroup	GeneralView
	@brief		MenuItemInfo是主菜单视图所需要的数据结构

				包括资源文件的名称、菜单项数目、菜单标题和每一个菜单项的ID号
				用户填充好此结构以后调用MainMenuView的SetMenuItemInfo方法设置菜单
 */

class MenuItemInfo : public BREWObj
{
public:
	MenuItemInfo();
	~MenuItemInfo();
	char ResFileName[RES_FILE_NAME_LEN];
	int MenuTitleID;
	int MenuItemNumber;
	int MenuItemID[MENUITEM_MAX_NUMBER];
	boolean m_bIconMenu;
	int MenuIconID[MENUITEM_MAX_NUMBER];
};


/*!
	@ingroup	GeneralView
	@brief		MainMenuView为用户提供实现一般菜单的简单方法
				
				用户只需填好MenuItemInfo结构再调用SetMenuItemInfo方法
				当MainMenuView Open的时候就会显示出主菜单
				使用时用户需要从此View上派生出自己的View,派生类中只需要重载HandleControlEvent方法
				以向应菜单项被按下的消息。当有菜单项被选中时,HandleControlEvent会接收到
				EVT_COMMAND消息,而参数param16则是第几项菜单被选中(从0开始计数)
 */
class MainMenuView : public AppView  
{
public:
	MainMenuView(AEEApplet *app);
	virtual ~MainMenuView();

	//内部接口
	virtual	void	  SetMenuItemInfo(MenuItemInfo* pMenuItem);
	virtual	MenuItemInfo* GetMenuItemInfo();
	virtual MenuCtl* GetMenuCtl();
	
	virtual AppResult Open();
	virtual AppResult Update();
	virtual AppResult Disable();
	virtual AppResult Enable();
	virtual AppResult Close();
	
	virtual ETStatus  HandleKeyEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	virtual ETStatus  HandleControlEvent(AEEEvent evtCode, uint16 param16, uint32 param32);

protected:
	IShell* m_pIShell;
	IDisplay* m_pIDisplay;
	MenuItemInfo* m_MenuItemInfo;
	boolean TimerOn;

	ControlContainer* m_pContainer; //控件容器
};






/*!
	@ingroup	GeneralView
	@brief		StaticView提供了在屏幕上显示磁盘文件内容的功能。
				
				支持长文本自动换行和滚屏
				用途:可用于简单的关于窗口,复杂的关于窗口建议使用HtmlView
				注意事项:磁盘上文件的编码方式必须是unicode,否则无法显示中文
				          最好不要用回车分隔各行(可以用一些空格,当转到下一行时多余空格会自动忽略),
						  否则部分手机的回车会显示出别的字符
 */

class StaticCtlView : public AppView  
{
public:
	StaticCtlView(AEEApplet *app);
	virtual ~StaticCtlView();
	
	virtual AppResult Open();
	virtual AppResult Update();
	virtual AppResult Disable();
	virtual AppResult Enable();
	virtual AppResult Close();
	virtual AppResult LoadFile();
	virtual AppResult LoadFileEx();
	virtual void SetReplace(boolean bReplace);

	virtual ETStatus HandleKeyEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	
	void SetResFileName(char* szFileName);
	void SetFileName(char* szFileName);
	void SetTitleID(int TitleID);


protected:
	IShell* m_pIShell;
	IDisplay* m_pIDisplay;
	IStatic* m_pIStatic;
	char m_szFileName[FILENAME_LENGTH];
	char m_ResFileName[FILENAME_LENGTH];
	int	 m_TitleID;
	boolean m_bReplace;

	AppResult DrawTitle();
	AppResult DrawText();
	void DisplayErrorMessage();
};



/*!
	@ingroup	GeneralView
	@brief		SplashView可以实现一个简单的Splash画面。

				用户需要设置好图片和splash过后的窗口即可以显示,默认1秒
 */

class SplashView : public AppView  
{
public:
	SplashView(AEEApplet *app,int NextWndID = 0);
	virtual ~SplashView();
	
	void setBKColor(RGBVAL BKColor);
	virtual AppResult Open();
	virtual AppResult Update();
	virtual AppResult Disable();
	virtual AppResult Enable();
	virtual AppResult Close();
	
	virtual void	  SetSplashPic(char* ResFile,int imgID);
	virtual void	  ChangeWnd();
	virtual void	  SetNextWnd(int NextWndID);
	virtual void	  SetTime(int time);

	virtual ETStatus HandleKeyEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	
protected:
	IShell*			m_pIShell;
	IDisplay*		m_pIDisplay;
	IImage*			m_pImg;
	char			m_ResFileName[FILENAME_LENGTH];
	int				m_imgID;
	AEECLSID		m_ClsID;
	int				m_NextWndID;
	int				m_time;
	RGBVAL			m_BKColor;
	
};


/*

class RecommendView : public AppView  
{
public:
	RecommendView(AEEApplet *app);
	virtual ~RecommendView();

	virtual AppResult Open(AppData *data);
	virtual AppResult Update();
	virtual AppResult Enable();
	virtual AppResult Disable();
	virtual AppResult Close();
	
	virtual void SetExitWndID(int ExitWndID);
	virtual boolean SendSMS();
	virtual void DisplayMessage(int Text_ID);
	virtual void StateChange(boolean Direction); //TRUE 表示转换到短页面,FALSE表示转换到长页面
	virtual void SetGameName(char* ResFileName, int GameNameID);
	static void Status(void* pv,int status);


	ETStatus HandleKeyEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	ETStatus HandleControlEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	void BkBrush();

protected:
	ControlContainer* m_pCtlContainer;
	TextCtl* m_pTextCtl_tel;
	InputCtl* m_pInputCtl_name;

	IBitmap* m_pIBitmap_bg;
	IShell* m_pIShell;
	IDisplay* m_pIDisplay;
	int		m_ActiveCtlID;
	int		m_ExitWndID;
	boolean	m_bDisplayMessage;

	AECHAR m_pUserName[USER_NAME_LENGTH];
	AECHAR m_TelNumber[15];
	AECHAR m_Title[TEXTLEN];
	AECHAR m_DisplayName[TEXTLEN];
	char   m_ResFileName[FILENAME_LENGTH];
	int	   m_GameNameID;

};
*/




/*!
	@ingroup	GeneralView
	@brief		ScoreListView使用的类,用于保存分数	
 */

class ScoreList:public SerialObj
{
public:
	ScoreList(IShell* pShell,DWORD dwID,BOOL bDescent);
	~ScoreList();

	virtual void OnSerialize(PSafeFile pFile,BOOL bLoading);

	int8	m_nCount;
	AECHAR	m_wszName[_ITEM_COUNT][_NAME_LEN];
	AECHAR	m_wszScore[_ITEM_COUNT][_SCORE_LEN];
	DWORD	m_dwScore[_ITEM_COUNT];
};

/*!
	@ingroup	GeneralView
	@brief		实现龙虎榜视图的类
				用户在使用时必须指定以下属性:
					用SetTitle()设定标题
					用SetBKImage()设定背景图片
					用SetColor()设定字体与背景颜色
 */

class ScoreListView:public AppView
{
public:
			ScoreListView(AEEApplet* pApp,BOOL bDescent=TRUE);
	virtual ~ScoreListView();
	
	virtual AppResult Open(); 
	virtual AppResult Close();
	virtual AppResult Enable();
	virtual AppResult Disable();
	virtual AppResult Update();

	virtual ETStatus HandleKeyEvent(AEEEvent evtCode,WPARAM wParam,DWORD dwParam);

	BOOL	SetTitle(PCSTR pszResFile,int16 nID);
	BOOL	SetBKImage(PCSTR pszResFile,int16 nID,BOOL bCenter=TRUE,BOOL bTransparent=FALSE);
	void	SetColor(RGBVAL rgbTxt,RGBVAL grbBK);

	BOOL	InsertNewScore(const AECHAR* pwszName,DWORD dwScore,const AECHAR* pwszScore=NULL);
	DWORD	GetScore(int nIndex=GS_LAST_ONE);
protected:
	IShell*			m_pShell;
	IDisplay*		m_pDisplay;

	BOOL			m_bDescent;
	ScoreList		m_ScoreList;

	char			m_szResFile[MAX_FILE_NAME];
	AECHAR			m_wszTitle[_TITLE_LEN];

	IImage*			m_pImgBK;
	int16			m_nImgBKID;
	BOOL			m_bCenter;
	BOOL			m_bTransparent;
	AEEImageInfo	m_ImgBKInfo;

	RGBVAL			m_rgbTxt;
	RGBVAL			m_rgbBK;
	RGBVAL			m_rgbOldTxt;
	RGBVAL			m_rgbOldBK;

	int				m_nIndex;

	int				m_nFontCY;
	int				m_nScreenCX;
	int				m_nScreenCY;
};

/*!
	@ingroup	IconMenuView
	@brief		实现图标菜单
 */

#define _MAX_ICON		 9
#define _MAP_ROW		 16
#define _MAP_COL		 16
#define _MAX_RESFILE_LEN 32
#define EVT_ICONMENU	(EVT_USER+1000)
#define IM_EXIT			-1

class IconMenuItem:public BREWObj
{ 
public:
	int16 	m_nTextID; 
	int16 	m_nImgNormalID;  
	int16	m_nImgFocusID; 
};
typedef IconMenuItem* PIconMenuItem;

class IconMenu:public AppView
{
public:
	IconMenu(AEEApplet* pApp);
	~IconMenu();

	virtual AppResult Open(); 
	virtual AppResult Close();
	
	virtual AppResult Enable() {return SUCCESS;}
	virtual AppResult Disable() {return SUCCESS;}
	
	virtual AppResult Update();

	virtual BOOL OnEvent(AEEEvent evtCode,WORD wParam,DWORD dwParam);

	void SetRes(const char* szPicRes, const char* szStringRes);
	void SetInfo(int16 nBKID,int16 nItemID,int nItemCount,int nMenuID=0);
	void SetItem(int nIndex,int16 nTextID,int16 nImgNormalID,int16 nImgFocusID);	
protected:
	int				m_nMenuID;

	int16			m_nItemID;
	int				m_nItemCount;	
	int				m_nItemFocus;	
	IconMenuItem	m_ItemInfo[_MAX_ICON];
	SpriteModel		m_ItemSprite[_MAX_ICON];	
	SpriteMgr* 		m_pSpriteMgr;
	 		
	int16			m_nBKID;
	TileMap	    	m_BKTile;
	WORD			m_wBKMap[_MAP_ROW][_MAP_COL];

	int16			m_nTextID;
	IStatic*    	m_pTextCtl;

	char            m_szPicRes[_MAX_RESFILE_LEN];
	char            m_szStringRes[_MAX_RESFILE_LEN];
};
typedef IconMenu* PIconMenu;



#endif

⌨️ 快捷键说明

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