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

📄 commonctl.h

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

/*!-----------------------------------
	@file		
	@brief		[CommonCtl] 通用控件接口

				从brew提供的各种控件中抽象出了Controlbase基类,并封装了HTMLVIEW控件、
				Static控件、Menu控件、Text控件,此外提供了TextDisplay控件用来解决
				Static控件无透明背景的问题,InputCtl以解决中文输入法的问题
				同时加入ControlContainer控件,作为所有控件容器,
				实现窗口中控件的分类和统一调度,以简化多控件之间切换、调度编程的复杂度。
				注意事项:通用控件接口中很多函数是Brew提供的控件接口的C++形式的封装,
				          因此本文档中并未包括这些函数的具体说明,函数功能以及各种参数
						  的意义请参阅BrewSDK API Reference 中的函数说明

  -----------------------------------*/


#ifndef __BEL_COMMONCTL_H__
#define __BEL_COMMONCTL_H__

/*!
	@defgroup	CommonCtl CommonCtl/通用控件接口
 */

#include <AEE.h>
#include "AppFrame.h"
#include "AEEMenu.h "
#include "AEEFILE.h"
#include "AEEText.h"
#include "Sprite2D.h"


#define ID_INVALID_CTL		0xFFFF
#define CTL_NO_TABORDER		-1
#define CONTAINER_TAB		-2
#define MAX_CONTROL_NUM		20 
#define  MAX_TEXT_LENGTH	100
#define CHECK_ACTIVENUM()   ASSERT((m_ActiveControlIndex > 0 && m_ActiveControlIndex < m_TotalCtlNum))


/*!
	@ingroup	CommonCtl
	@brief		控件切换的方向,每个控件都有一个TabOrder

				TAB_ORDER_INC:激活下一个可见的并且TabOrder大于当前控件的控件
				TAB_ORDER_DEC:激活下一个可见的并且TabOrder小于当前控件的控件
*/

typedef enum
{
	TAB_ORDER_INC			= 0x00,
	TAB_ORDER_DEC			= 0x01,
}Tab_Direction;



/*!
	@ingroup	CommonCtl
	@brief		ComtorlBase时所有控件的基类,一般定义为所有控件类的指针。

				ControlBase不能直接定义对象,必须由派生类继承并重载一些函数

*/

class ControlBase :public VisibleObj
{
public:
	ControlBase(int ControlID,int TabOrder);
	virtual ~ControlBase();
	
	
	//派生类必须重载的函数并且在函数中调用基类的函数
	//open在函数开头调用,close在函数结尾调用
	virtual AppResult Open();
	virtual AppResult Close();	
	
	
	virtual AppResult Update();
	
	//派生类可以不重载的函数,但建议按基类中的写法重载一下
	virtual ControlBase* FindNextTabCtl(int CurTabOrder,Tab_Direction Dir);
	virtual ControlBase* FindActiveCtl();
	virtual int FindActiveID();
	virtual ControlBase* GetCtl(int ControlID);
	
	virtual void SetRect(const AEERect * prc);
	virtual void GetRect(AEERect * prc);
	virtual boolean IsActive();
	virtual void    SetActive(boolean bActive);
	virtual boolean Redraw();		
	virtual void	Reset();		
	virtual uint32	GetProperties();
	virtual void	SetProperties(uint32 dwProps);
	
	
	//一般不需要继承的函数
	virtual void	SetVisible(boolean bVisible);
	virtual boolean IsVisible();
	virtual int		GetTabOrder();
	virtual void	RegisterID(int ControlID);
	virtual boolean IsOpen();

protected:
	IControl* m_pIControl;
	IShell* m_pIShell;
	IDisplay* m_pIDisplay;
	boolean m_IsVisible;
	int		m_ControlID;
	AEERect m_rect;
	boolean m_IsOpen;
	int m_TabOrder;
};



/*!
	@ingroup	CommonCtl
	@brief		ControlContainer继承自ControlBase,为所有控件提供了“容器”

	            因为继承自ControlBase所以ControlContainer也可以容纳自身
				ControlContainer提供了统一组织控件的简单方法
				为每个控件提供了VISIBLE属性及TAB切换的顺序
*/

class ControlContainer : public ControlBase  
{
public:
	ControlContainer(int ControlID,int TabOrder = CONTAINER_TAB);
	virtual ~ControlContainer();

	
	virtual AppResult Enable(int CtlID);
	virtual int		AddControl(ControlBase* control);
	virtual void	SetLoopTab(boolean bLoop);
	virtual boolean TabChange(Tab_Direction Dir);
	virtual boolean OnEvent(AEEEvent evtCode, uint16 param16, uint32 param32);
	virtual void	SwitchActiveTo(int CtlID);

	//派生类必须重载的函数并且在函数中调用基类的函数
	//open在函数开头调用,close在函数结尾调用
	virtual AppResult Open();
	virtual AppResult Close();	
	virtual AppResult Enable();
	virtual AppResult Disable();
	virtual AppResult Update();

	virtual ControlBase* FindNextTabCtl(int CurTabOrder,Tab_Direction Dir);
	virtual ControlBase* FindActiveCtl();
	virtual int			 FindActiveID();
	virtual ControlBase* GetCtl(int ControlID);

	virtual boolean IsActive();
	virtual void    SetActive(boolean bActive);
	virtual boolean Redraw();		
	virtual void	Reset();		
	virtual uint32	GetProperties();
	virtual void	SetProperties(uint32 dwProps);
	virtual void	SetVisible(boolean bVisible);	

protected:
	ControlBase * m_ControlList[MAX_CONTROL_NUM];
	boolean m_LoopTab;
	int m_TotalCtlNum;

};


/*!
	@ingroup	CommonCtl
	@brief		MenuCtl主要是brew提供的IMENUCLT的C++封装,
				同时继承自ControlBase时提供了一些与ControlContainer适应的方法
	
 */

class MenuCtl : public ControlBase  
{
public:
	MenuCtl(int ControlID,int TabOrder,int MenuStyle = AEECLSID_MENUCTL);
	virtual ~MenuCtl();

	//继承自VisibleObj
	virtual AppResult Open();
	virtual AppResult Close();	
	virtual AppResult Enable();
	virtual AppResult Disable();
	virtual AppResult Update();

	//继承自ControlBase
	virtual ControlBase* FindNextTabCtl(int CurTabOrder,Tab_Direction Dir);
	virtual ControlBase* FindActiveCtl();
	virtual int			 FindActiveID();
	virtual void		 SetVisible(boolean bVisible);

	//事件响应
	virtual boolean OnEvent(AEEEvent evtCode, uint16 param16, uint32 param32);

	//以下是brew提供的IMenu控件接口的简单封装,具体参数意义及使用方法
	//请参照Brew SDK API Reference
	virtual void	SetRect(const AEERect * prc);
	virtual void	GetRect(AEERect * prc);
	virtual boolean IsActive();
	virtual void    SetActive(boolean bActive);
	virtual boolean Redraw();		
	virtual void	Reset();		
	virtual uint32	GetProperties();
	virtual void	SetProperties(uint32 dwProps);
	virtual boolean SetTitle(const char * pszResFile, uint16 wResID, AECHAR * pText );
	virtual void	SortCustom (PFNMENUSORTCOMPARE pfn, void * pUser );
	virtual void	Sort(AEEMenuSortType t);
	virtual void	SetStyle (AEEItemStyle * pNormal,AEEItemStyle * pSel );
	virtual void	SetSelEx(uint16 wID, boolean bSelected );
	virtual void	SetSel(uint16 nItemID);
	virtual void	SetItemTime(uint16 nItemID, uint16 wMinStart, uint16 wDuration );
	virtual void	SetItemText(uint16 nItemID,const char * pszResFile, uint16 wResID,AECHAR * pText );
	virtual boolean SetItem (uint16 wID, uint16 wFlags, CtlAddItem * pai );
	virtual void	SetFocus(uint16 wID);
	virtual void	SetColors(AEEMenuColors * pc);
	virtual void	MoveItem(uint16 nItemID, int nDir);
	virtual uint16	GetSel();
	virtual int		GetItemTime ( uint16 nItemID,uint16 * pwDuration );
	virtual uint16	GetItemID(int nIdx);
	virtual boolean GetItemData(uint16 nItemID, uint32 * plData );
	virtual int		GetItemCount();
	virtual boolean GetItem(uint16 wID,CtlAddItem * pai);
	virtual uint16	GetFocus();
	virtual boolean EnumSelInit();
	virtual uint16	EnumNextSel();
	virtual void	EnableCommand(boolean bEnable);
	virtual boolean DeleteItem(uint16 nItemID);
	virtual boolean DeleteAll();
	virtual boolean AddItemEx(CtlAddItem * pai);
	virtual boolean AddItem(const char * pszResFile, uint16 wResID, uint16 nItemID, AECHAR * pText, uint32 lData );
	virtual void	SetMenuType(int MenuTypeID);

private:
	IMenuCtl* m_pIMenuCtl;
	int m_MenuTypeID;

};



/*!
	@ingroup	CommonCtl
	@brief		StaticCtl主要是brew提供的IStaticCLT的C++封装,
				同时继承自ControlBase时提供了一些与ControlContainer适应的方法	
*/

class StaticCtl : public ControlBase  
{
public:
	StaticCtl(int ControlID,int TabOrder);
	virtual ~StaticCtl();

	//继承自VisibleObj
	virtual AppResult Open();
	virtual AppResult Close();	
	virtual AppResult Enable();
	virtual AppResult Disable();
	virtual AppResult Update();

	//继承自ControlBase
	virtual ControlBase* FindNextTabCtl(int CurTabOrder,Tab_Direction Dir);
	virtual ControlBase* FindActiveCtl();

⌨️ 快捷键说明

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