📄 commonctl.h
字号:
/*
* 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 + -