📄 appsviewer.cpp
字号:
/////////////////////////////////////////////////////////////////////
// Project : Appsviewer
// File: Appsviewer.h
// 2005/07/26
/////////////////////////////////////////////////////////////////////
//---------------- Inculde ------------------
#include ".\appsviewer.h"
#include "appsviewer.bid"
#include "appsviewer.brh"
#ifdef IP56
#include "stdAfx_1.h"
#else
#include "stdafx.h"
#endif
//-------------------------------------------
//---------------- Define -------------------
// The current window
#define m_pCurrWnd (m_arpWnd[m_wIndex])
// The current state
#define m_wCurrState (m_arwState[m_wIndex])
#define EMULATOR_IMSI "13301011012"
#define STATE_MAINMENU 0x0001 //Remind user to order
#define STATE_CONNECTING 0x0002 //Current is connecting
#define STATE_CHARGETYPE 0x0003 //List menu used to select charge type
#define STATE_CONNECTFAIL 0x0004 //Connection failed
#define STATE_CHARGEDETAIL 0x0005 //Introduce charge
#define STATE_ORDERRESULT 0x0006 //Display result of user’s order
#define STATE_ERRORALART 0x0007 //Display error messager
#define STATE_NOPOLICY 0x0008 //服务器没有相关资费策略
#define STATE_APP_DISABLE 0x0009 //应用不可用
#define STATE_ORDER_SUCCESS 0x000A //定购完成
#define STATE_HELP 0x000B
#define STATE_ABOUT 0x000C
#define STATE_NO_APP_DOWN 0x000D
#define STATE_APP_LIST 0x000E
#define STATE_SHOW_BILLING 0x000F //显示已定购的关系
#define STATE_SERVICE_CATALOG 0x0010 //服务分类查询
#define STATE_POLICY_OPTION 0x0011 //资费选项
#define STATE_POLICY_RENEW 0x0012
#define STATE_CONFIRM 0x0013
#define STATE_LIMITATIONNOTIFY 0x0010 //Notify user to charge
#define APPCLS_BUFF_SIZE 20
#define URL_PARAM_CLASSID "ClassID="
#define URL_PARAM_IMSI "IMSI="
#define URL_PARAM_BILLINGPOLICY "BillingPolicy="
#define URL_PARAM_CATALOG "CatalogID="
#define URL_PARAM_ISRENEW "IsRenew="
#define URL_PARAM_SYMBOL_AND "&"
#define DATEBASE_FILENAME "orderinfo.db"
//-------------------------------------------
//static const AECHAR wszAppName[] = {'T', 'e', 's', 't', '!', 0};
//-------------------------------------------
//////////////////////////////////////////////////////////////////////
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
*ppObj = NULL;
if(ClsId == AEECLSID_APPSVIEWER)
{
if(AEEApplet_New(sizeof(CAppsViewer), ClsId, pIShell,po,(IApplet**)ppObj,
(AEEHANDLER)CAppsViewer::HandleEvent,(PFNFREEAPPDATA)CAppsViewer::FreeAppData)
== TRUE)
{
// Add your code here .....
if(CAppsViewer::InitAppData((IApplet *)*ppObj))
{
return (AEE_SUCCESS);
}
}
}
return (EFAILED);
}
//初始化应用程序数据
boolean CAppsViewer::OnInitData()
{
//===========系统生成,请勿修改,开始========
//使用IShell接口m_pIShell创建类CShell对象
m_pShell = CShell::FromHandle(m_applet.m_pIShell, FALSE);
//使用IDisplay接口m_pIDisplay创建类CDisplay对象
m_pDisplay = CDisplay::FromHandle(m_applet.m_pIDisplay, FALSE);
if(!m_pShell || !m_pDisplay)
return FALSE;
//===========系统生成,请勿修改,结束========
//--------------your codes---------------
m_wIndex = 0;
m_arpWnd[0] = NULL;
m_pWebAction = NULL;
m_pWebUtil = NULL;
m_bConnectionAction = FALSE;
m_pBillingPolicys = NULL;
m_pAppInfos = NULL;
// Read order infomation
return TRUE;
}
//释放应用程序资源
void CAppsViewer::OnFreeData()
{
//-----------------your codes---------------
//...
int i;
for(i=0; i<=m_wIndex; i++)
{
if(m_arpWnd[i])
{
delete m_arpWnd[i];
m_arpWnd[i] = NULL;
}
}
if(m_pWebUtil)
{
m_pWebUtil->Release();
delete m_pWebUtil;
}
if(m_pWebAction)
{
m_pWebAction->ReleaseWeb();
delete m_pWebAction;
}
FREEIF(m_pSvrUrl);
FREEIF(m_pBillingPolicys);
FREEIF(m_pAppInfos);
//===========系统生成,请勿修改,开始========
//释放Shell指针
if(m_pShell)
delete m_pShell;
//释放Display指针
if(m_pDisplay)
delete m_pDisplay;
//===========系统生成,请勿修改,结束========
}
//处理应用程序消息,事件
boolean CAppsViewer::OnEvent(AEEEvent evt, uint16 wParam, uint32 dwParam)
{
if(m_pCurrWnd && m_pCurrWnd->HandleEvent(evt, wParam, wParam))
{
return TRUE;
}
switch(evt)
{
case EVT_APP_START: //开始
//应用程序开始事件处理
return OnAppStart();
case EVT_APP_STOP: //停止
//应用程序停止事件处理,一般不用处理
return TRUE;
case EVT_APP_SUSPEND: //暂停
//应用程序挂起事件处理,需要设置挂起标志,并保存当前界面状态,以免在挂起状态中出来按键等消息
//...
return TRUE;
case EVT_APP_RESUME: //恢复
//应用程序恢复事件处理,需要清除挂起标志,并恢复到挂起前的界面状态
//...
return TRUE;
case EVT_KEY: //按键事件
//不处理AVK_SEND消息
if(wParam == AVK_SEND)
return FALSE;
//其它按键处理
if(wParam == AVK_CLR)
return OnClrKeyEvent();
//...
break;
case EVT_COMMAND:
//
return OnCommand(wParam, dwParam);
//...
default:
break;
}
//...
return FALSE;
}
//////////////////////////////////////////////////////////////////////////
// Handle EVT_APP_START event
// wParam: This parameter of event which is uint16 type.
// dwParam: This parameter is uint32 type. It’s a pointer of AEEAppStart
boolean CAppsViewer::OnAppStart(/*uint16 wParam, uint32 dwParam*/)
{
//获取手机IMSI
#ifdef WIN32
STRNCPY(m_szIMSI, EMULATOR_IMSI, MOBILE_ID_LEN);
m_szIMSI[MOBILE_ID_LEN] = 0;
#else
CTAPI *pTAPI = new CTAPI();
if(pTAPI == NULL)
{
//get imsi fail
return ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_CLSERROR, STATE_ERRORALART);
}
else
{
TAPIStatus ps;
if(m_pShell->CreateInstance(AEECLSID_TAPI, pTAPI) != SUCCESS)
{
delete pTAPI;
return ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_IMSIERROR, STATE_ERRORALART);
}
if(SUCCESS == pTAPI->GetStatus(&ps))
{
STRNCPY(m_szIMSI, ps.szMobileID, MOBILE_ID_LEN);
m_szIMSI[MOBILE_ID_LEN] = 0;
delete pTAPI;
}
else
{
//get imsi fail
delete pTAPI;
return ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_CLSERROR, STATE_ERRORALART);
}
}
#endif
//初始化类指针
m_pWebUtil = new CWebUtil();
//网络连接对象
m_pWebAction = new CGatewayProxyWeb(this);
if(!m_pWebUtil || !m_pWebAction)
{
return ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_WEBERROR, STATE_ERRORALART);
}
//创建WebUtil实例
if(!m_pWebUtil->GetHandle() && m_pShell->CreateInstance(AEECLSID_WEBUTIL, m_pWebUtil) != SUCCESS)
return ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_WEBERROR, STATE_ERRORALART);
//创建WebAction
if(!m_pWebAction->Create(m_pShell, m_pWebUtil))
return ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_WEBERROR, STATE_ERRORALART);
//New first window
CBaseWnd *pWnd = CreateBaseWnd(BASEWND_TYPE_MENU, 0, 0);
if(!pWnd)
{
return FALSE;
}
/*
for(int i = IDS_MAINMENU_ALL; i <= IDS_MAINMENU_HELP; i++)
{
AECHAR *pwszTemp = m_pShell->LoadResString(APPSVIEWER_RES_FILE, i);
if(!pwszTemp)
return FALSE;
pWnd->AddItemEx(APPSVIEWER_RES_FILE, IDB_BASEWND_ITEM1, 0, i, pwszTemp, 0);
FREEIF(pwszTemp);
}
*/
AECHAR *pwszTemp = m_pShell->LoadResString(APPSVIEWER_RES_FILE, IDS_MAINMENU_ALL);
if(!pwszTemp)
return FALSE;
pWnd->AddItemEx(APPSVIEWER_RES_FILE, IDB_BASEWND_ITEM1, 0, IDS_MAINMENU_ALL, pwszTemp, 0);
FREEIF(pwszTemp);
InsertWindow(pWnd, STATE_MAINMENU);
return TRUE;
}
// Handle EVT_KEY(AVK_CLR) event
boolean CAppsViewer::OnClrKeyEvent()
{
switch(m_wCurrState)
{
case STATE_MAINMENU:
//Close this Applet
m_pShell->CloseApplet(FALSE);
return TRUE;
case STATE_CONNECTING:
//cancel connection
m_bConnectionAction = FALSE;
case STATE_CONNECTFAIL: //Connection failed
case STATE_CHARGEDETAIL: //Introduce charge
case STATE_ABOUT:
case STATE_HELP:
case STATE_NO_APP_DOWN:
case STATE_SHOW_BILLING:
case STATE_SERVICE_CATALOG:
case STATE_APP_LIST:
case STATE_POLICY_OPTION:
case STATE_ORDER_SUCCESS:
case STATE_POLICY_RENEW:
case STATE_ORDERRESULT:
case STATE_CONFIRM:
case STATE_APP_DISABLE:
case STATE_CHARGETYPE:
//Back to previous window, if there are the first window, then close applet
delete m_pCurrWnd;
m_pCurrWnd = NULL;
//First window?
if(m_wIndex == 0)
{
m_pShell->CloseApplet(FALSE);
return TRUE;
}
//Back to previous window
m_wIndex--;
m_pCurrWnd->Resume();
return TRUE;
case STATE_NOPOLICY:
// StartTargetApp();
return TRUE;
default:
break;
}
return FALSE;
}
// Handle EVT_COMMAND event
// wParam: Item ID
// dwParam: The control which send out this event
boolean CAppsViewer::OnCommand(uint16 wParam, uint32 dwParam)
{
switch(m_wCurrState)
{
case STATE_MAINMENU:
return OnMainMenu(wParam);
case STATE_CONNECTING: //Current is connecting
if(wParam == IDS_SOFTKEY_CANCEL)
{
return OnClrKeyEvent();
}
break;
case STATE_CONNECTFAIL: //Connection failed
if(wParam == IDS_SOFTKEY_CANCEL)
{
return OnClrKeyEvent();
}
else if(wParam == IDS_SOFTKEY_RETRY)
{
//Remove current window
delete m_pCurrWnd;
m_wIndex--;
//
//Start to connect with network
if(m_pWebAction)
{
//Start web connect success?
if(m_pWebAction->CreateWeb()
&& m_pWebAction->WebConnect((const char *)m_pSvrUrl, NULL))
{
ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_WEBERROR, STATE_ERRORALART);
return TRUE;
}
else
{
ShowMessageWnd(IDS_SOFTKEY_CANCEL, 0, IDS_ALART_CHECK, STATE_CONNECTING);
return TRUE;
}
}
return TRUE;
}
break;
case STATE_APP_DISABLE:
delete m_pCurrWnd;
m_wIndex--;
return OnClrKeyEvent();
case STATE_NOPOLICY:
case STATE_ORDER_SUCCESS:
return OnClrKeyEvent();
case STATE_SHOW_BILLING:
if(wParam == IDS_SOFTKEY_OK){
return OnClrKeyEvent();
}
else if(wParam == IDS_SOFTKEY_CHECKOUT)
{
//退定接口
}
break;
case STATE_POLICY_OPTION:
//资费选项
if(wParam == IDS_SOFTKEY_CANCEL)
{
return OnClrKeyEvent();
}
else if(wParam == IDS_SOFTKEY_OK)
{
uint32 lData;
CMenuCtl *pMenuCtl = m_pCurrWnd->GetMenuCtl();
if(!pMenuCtl)
return TRUE;
pMenuCtl->GetItemData(m_nPolicyIndex, &lData);
m_nIsRenew =(uint16) lData;
delete m_pCurrWnd;
m_wIndex--;
CtlAddItem ai;
pMenuCtl = m_pCurrWnd->GetMenuCtl();
pMenuCtl->GetItem(m_nPolicyIndex, &ai);
return CreateConfirmWnd((AECHAR *)ai.pText);
}
else
{
//选项切换
CMenuCtl *pMenuCtl = m_pCurrWnd->GetMenuCtl();//(CMenuCtl *)dwParam;
// if(pMenuCtl == m_pCurrWnd->GetMenuCtl())
{
uint32 lData;
pMenuCtl->GetItemData(wParam, &lData);
CtlAddItem *pai = (CtlAddItem*)MALLOC(sizeof(CtlAddItem));
if(!pai)
{
return TRUE;
}
pai->pszResImage = APPSVIEWER_RES_FILE;
pai->pszResText = APPSVIEWER_RES_FILE;
pai->wImage = lData == 1 ? IDB_OPTION_YES : IDB_OPTION_NO; //状态图标
pai->dwData = lData == 1 ? 0 : 1;
pai->wText = IDS_OPTION_ITEM;
pMenuCtl->SetItem(wParam, MSIF_IMAGE | MSIF_DATA, pai);
FREE(pai);
pMenuCtl->Redraw();
}
return TRUE;
}
break;
case STATE_CHARGETYPE:
//List menu used to select charge type
if(wParam == IDS_SOFTKEY_CANCEL)
{
return OnClrKeyEvent();
}
else if(wParam == IDS_SOFTKEY_DOWNLOAD)
{
return m_pCurrWnd->HandleEvent(EVT_KEY, AVK_SELECT, 0);
}
else
{
if(m_nViewType == APP_TYPE_DOWNLOADED)
{
uint32 lData;
CMenuCtl *pMenu = m_pCurrWnd->GetMenuCtl();
if(pMenu)
{
pMenu->GetItemData(wParam, &lData);
}
if(lData == 0)
{
m_nPolicyIndex = wParam;
m_nIsRenew = 1;
CtlAddItem ai;
pMenu->GetItem(wParam, &ai);
return CreateConfirmWnd((AECHAR*)ai.pText);
}
else
{
//有续定选项
//--goto 选择是否自动续定
m_nPolicyIndex = wParam;
return CreatePolicyOption(wParam);
}
}
else
{
ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_NOTIFY_DISABLE, STATE_APP_DISABLE);
}
}
break;
case STATE_CONFIRM:
if(wParam == IDS_SOFTKEY_CANCEL)
{
return OnClrKeyEvent();
}
else if(wParam == IDS_SOFTKEY_OK)
{
delete m_pCurrWnd;
m_wIndex--;
if(StartOrder(m_nPolicyIndex, m_nIsRenew))
{
return ShowMessageWnd(IDS_SOFTKEY_CANCEL, 0, IDS_ALART_ORDER, STATE_CONNECTING);
}
else
{
return ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_WEBERROR, STATE_ERRORALART);
}
}
break;
case STATE_APP_LIST:
case STATE_SERVICE_CATALOG:
uint32 lData;
boolean nRtn;
m_pCurrWnd->GetMenuItemData(wParam, &lData);
if( m_wCurrState == STATE_SERVICE_CATALOG)
{
//分类目录
nRtn = StartGetService(wParam);
}
else if(m_wCurrState == STATE_APP_LIST)
{
//应用列表
if(m_nViewType == APP_TYPE_DOWNLOADED)
{
return CreatePolicyRenew(wParam, m_pAppInfos[lData].isCancel, m_pAppInfos[lData].isRenew, m_pAppInfos[lData].wszPolicy);
}
else
{
nRtn = StartGetSubscription(lData);
}
}
if(nRtn)
{
return ShowMessageWnd(IDS_SOFTKEY_CANCEL, 0, IDS_ALART_CHECK, STATE_CONNECTING);
}
else
{
return ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_WEBERROR, STATE_ERRORALART);
}
break;
case STATE_POLICY_RENEW:
if(wParam == IDS_SOFTKEY_CANCEL)
{
return OnClrKeyEvent();
}
else if(wParam == IDS_SOFTKEY_OK)
{
return m_pCurrWnd->HandleEvent(EVT_KEY, AVK_SELECT, 0);
}
else
{
uint32 lData;
m_pCurrWnd->GetMenuItemData(wParam, &lData);
boolean nRtn = FALSE;
if(wParam == IDS_MENU_RENEW)
{
//续定
nRtn = StartRenew(lData);
}
if(wParam == IDS_MENU_CANCEL)
{
//退定
nRtn = StartCancel(lData);
}
if(nRtn)
{
return ShowMessageWnd(IDS_SOFTKEY_CANCEL, 0, IDS_ALART_CHECK, STATE_CONNECTING);
}
else
{
return ShowMessageWnd(IDS_SOFTKEY_OK, 0, IDS_ALART_WEBERROR, STATE_ERRORALART);
}
}
break;
default:
break;
}
return FALSE;
}
// Insert a window to list and suspend previous window, show current window
// pWnd: Window to be inserted
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -