📄 generalview.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 + -