分享
 
 
 

谈谈用C++开发BREW程序[原创]

王朝c/c++·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

一直是使用的纯C写的BREW程序,由于一些原因,自己开始琢磨使用C++开发BREW,并且在金融界的BREW版本中使用了该框架,感觉比较方便,

现在总结一哈经验与大家分享一哈。(后付源代码工程,编译成功,绝对无木马,欢迎广大群众放心使用)

1。内存的分配是释放

BREW下,只能由平台提供的接口分配和释放,所以我们要按规矩办事,需要inline我们久违的操作符 new 和 delete ,

哇,我好喜欢new哦。。。记得要delete哦

源码:

inline void* operator new (size_t,void* a0) throw() {return(a0);}

inline void* operator new [] (size_t,void* a0) throw() {return(a0);}

inline void* operator new (size_t r0) throw() {return(MALLOC(r0));}

inline void* operator new [] (size_t r0) throw() {return(MALLOC(r0));}

inline void operator delete (void*,void*) {return;}

inline void operator delete [] (void*,void*) {return;}

inline void operator delete (void* a0) {FREE(a0);return;}

inline void operator delete [] (void* a0) {FREE(a0);return;}

2。指针的重释

源码:

#ifndef AEE_SIMULATOR

template

inline T reinterpret_brew (const void* a0) {return(T(a0));}

template

inline T static_brew (const void* a0) {return(T(a0));}

template

inline T dynamic_brew (const void* a0) {return(T(a0));}

template

inline T const_brew (const void* a0) {return(T(a0));}

#else

#define reinterpret_brew reinterpret_cast

#define static_brew static_cast

#define dynamic_brew dynamic_cast

#define const_brew const_cast

#endif

3.平台调用我们的Applet的入口

必须使用extern "C"来定义,不要告诉我,你不晓得是浪咯会事哈

源码:

//入口

extern "C"

{

int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)

{

*ppObj = NULL;

if(ClsId == AEECLSID_TJAPP)

{

if(AEEApplet_New(sizeof(CTJApp), ClsId, pIShell,po,(IApplet**)ppObj,

(AEEHANDLER)CTJApp::HandleEvent,(PFNFREEAPPDATA)CTJApp::freeAppData))

{

if(CTJApp::initAppData((IApplet *) *ppObj))

{

return (AEE_SUCCESS);

}

}

}

return (EFAILED);

}

}

4。实现C到C++的转换

定义3个静态函数,

源码:

static boolean HandleEvent(CTJApp * pApp, AEEEvent eCode, uint16 wparam, uint32 dwParam);

static boolean initAppData(IApplet * pIApplet);

static void freeAppData(CTJApp * pApp);

事件转发,转换到C++

源码:

boolean CTJApp::HandleEvent(CTJApp * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)

{

if( eCode == EVT_KEY && wParam == AVK_FA_F2 )

wParam = AVK_FA_SELECT;

return pi->OnEvent(eCode, wParam, dwParam);

}

其他的结构模式都是按照 MediaPlay 来处理的。MediaPlay是经典之作哈

大部分程序的结构都是来自它的。

5。新建一个窗口

准备好了哇,先定义窗口值,继承一个class CTJWin

实现class CTJWin 的虚函数,虚函数哈哈,我喜欢虚函数

源码:

virtual boolean OnInit(CTJApp* pApp){return TRUE;}

virtual void OnEnable(boolean bEnable=TRUE){}

virtual void OnRedraw(){}

virtual boolean OnHandleEvent(AEEEvent eCode, uint16 wParam, uint32 dwParam){return TRUE;}

virtual boolean OnNotify(int nNotify){return TRUE;}//需要数据通报,请覆盖此函数

然后在相应的函数里实现自己需要的功能。

我已经在CTJWin里面写好一些常用的函数,绝对无木马,欢迎广大群众放心使用,一切后果自负哈,嘿嘿

里面实现了,对话框和基本的标题,按钮,和窗口切换

源码:

static void CloseMsg(CTJWin* pWin);//自动消失的对话框的关闭函数

void ShowMsg();//显示对话框

void SetMsg(uint16 nMsgID,MSG_TYPE nMT = MT_1000 );//2种方式

void SetMsg(AECHAR *psz,MSG_TYPE nMT = MT_1000 );

booleanIsActive();//窗口是否活动

void DrawTitle(boolean bCenter = TRUE);//画标题

void DrawTitle(AECHAR* psz,boolean bCenter = TRUE);

void DrawTitleBar(AEERect * pRect, AECHAR* psTextBuf,RGBVAL Background, RGBVAL Text, boolean bCenter);

void DrawTTB();//Text TB

void DrawTB();

void DrawToolbar(AEERect * pRect, uint16 nResID, boolean bLeft);

void DrawTextTB(AEERect * pRect,uint16 nTextResID,boolean bLeft);

void DrawTTBText(AEERect * pRect, AECHAR* psTextBuf,RGBVAL Text, boolean bLeft);

void LoadTitle();

void LoadTitle(uint16);

void SetTitle(AECHAR*);

public:

boolean OnNumKey(IMenuCtl* pMenu,uint16 key);

boolean PostEvent(AEEEvent evt,uint16 wp,uint32 dwp);

boolean GoWin(TPWindow tpwin);//切换窗口

boolean GoBackWin();//回到上一个窗口

void ClearScreen();//清屏

TPWindow GetTPActive();//当前窗口的值

TPWindow GetTPBack();//上次窗口的值得

还有就看看大家有没时间来补充了哈。

6。例子:CSplashWin,启动程序的闪屏窗口

要求:

初始的时候提取一个图片资源

重绘的时候显示一个图片

对键盘的处理任意键跳过,切换到主窗口

对窗口Enable 和 Disable 的处理(来电和短信)

定时结束,切换到主窗口

销毁窗口的时候,释放图片资源,释放定时器

源码:

#include "TJWin.h"

class CSplashWin : public CTJWin

{

public:

CSplashWin();

virtual ~CSplashWin();

boolean OnInit(CTJApp* pApp);

void OnEnable(boolean bEnable=TRUE);

void OnRedraw();

boolean OnHandleEvent(AEEEvent eCode, uint16 wParam, uint32 dwParam);

static void CloseSplash(CSplashWin* pSlashWin);//定时器函数,

IImage * pi;//启动画面画图片

};

实现具体的功能

源码:

CSplashWin::CSplashWin()

{

}

CSplashWin::~CSplashWin()

{

//销毁窗口的时候,释放图片资源,释放定时器

ISHELL_CancelTimer(m_pIShell, (PFNNOTIFY)CSplashWin::CloseSplash, this);

FA_RELEASEIF(pi);

}

boolean CSplashWin::OnInit(CTJApp* pApp)

{

//初始的时候提取一个图片资源

pi = ISHELL_LoadResImage(m_pIShell, TJAPP_RES_FILE, IDB_SPLASH);

return TRUE;

}

void CSplashWin::CloseSplash(CSplashWin* pSlashWin)

{

//定时结束,切换到主窗口

pSlashWin->m_pApp->SetWindow(FAW_MAIN);

}

void CSplashWin::OnEnable(boolean bEnable)

{

//对窗口Enable 和 Disable 的处理(来电和短信)

if( bEnable)

{

ISHELL_SetTimer(m_pIShell, FA_SPLASH_TIMER , (PFNNOTIFY)CSplashWin::CloseSplash, this);

}

else

{

ISHELL_CancelTimer(m_pIShell, (PFNNOTIFY)CSplashWin::CloseSplash, this);

}

}

void CSplashWin::OnRedraw()

{

//重绘的时候显示一个图片

if (pi)

{

FA_DrawImage(pi, &m_pApp->m_rect, TRUE);

}

}

boolean CSplashWin::OnHandleEvent(AEEEvent eCode, uint16 wParam, uint32 dwParam)

{

//对键盘的处理任意键跳过,切换到主窗口

if( eCode == EVT_KEY)

{

m_pApp->SetWindow(FAW_MAIN);

}

return TRUE;

}

在开发当中,在逐渐建立自己的C++开发库,比如CTJMenuo(菜单) ,CSTWin(文本) 都是从CTJWin的基础上建立起来的,

不断的丰富CTJWin的功能函数,在以后的开发中提高效率和健壮性。以上还望大家指点,以达抛砖引玉。

唐建

2004/09/24

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有