📄 keymove.c
字号:
/*===========================================================================
FILE: keymove.c
===========================================================================*/
/*===============================================================================
INCLUDES AND VARIABLE DEFINITIONS
=============================================================================== */
#include "AEEModGen.h" // Module interface definitions
#include "AEEAppGen.h" // Applet interface definitions
#include "AEEShell.h" // Shell interface definitions
#include "keymove.bid"
#include "aeedisp.h"
#ifndef Max
#define Max( x, y ) ( ((x) > (y)) ? (x) : (y) )
#endif
#ifndef Min
#define Min( x, y ) ( ((x) < (y)) ? (x) : (y) )
#endif
/*-------------------------------------------------------------------
Applet structure. All variables in here are reference via "pMe->"
-------------------------------------------------------------------*/
typedef struct _keymove {
AEEApplet a ; // First element of this structure must be AEEApplet
AEEDeviceInfo DeviceInfo; // always have access to the hardware device information
int x;
int y;
int cxScreen;
int cyScreen;
} keymove;
/*-------------------------------------------------------------------
Function Prototypes
-------------------------------------------------------------------*/
static boolean keymove_HandleEvent(keymove* pMe, AEEEvent eCode,
uint16 wParam, uint32 dwParam);
boolean keymove_InitAppData(keymove* pMe);
void keymove_FreeAppData(keymove* pMe);
/*===============================================================================
FUNCTION DEFINITIONS
=============================================================================== */
/*===========================================================================
FUNCTION: AEEClsCreateInstance
===========================================================================*/
int AEEClsCreateInstance(AEECLSID ClsId, IShell *pIShell, IModule *po, void **ppObj)
{
*ppObj = NULL;
if( ClsId == AEECLSID_KEYMOVE )
{
// Create the applet and make room for the applet structure
if( AEEApplet_New(sizeof(keymove),
ClsId,
pIShell,
po,
(IApplet**)ppObj,
(AEEHANDLER)keymove_HandleEvent,
(PFNFREEAPPDATA)keymove_FreeAppData) ) // the FreeAppData function is called after sending EVT_APP_STOP to the HandleEvent function
{
//Initialize applet data, this is called before sending EVT_APP_START
// to the HandleEvent function
if(keymove_InitAppData((keymove*)*ppObj))
{
//Data initialized successfully
return(AEE_SUCCESS);
}
else
{
//Release the applet. This will free the memory allocated for the applet when
// AEEApplet_New was called.
IAPPLET_Release((IApplet*)*ppObj);
return EFAILED;
}
} // end AEEApplet_New
}
return(EFAILED);
}
/*===========================================================================
FUNCTION SampleAppWizard_HandleEvent
===========================================================================*/
static boolean keymove_HandleEvent(keymove* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
AEERect rc;
AEEDeviceInfo deviceInfo;
switch (eCode)
{
// App is told it is starting up
case EVT_APP_START:
ISHELL_GetDeviceInfo(pMe->a.m_pIShell, &deviceInfo);
pMe->x = (deviceInfo.cxScreen - 8)/2;
pMe->y = (deviceInfo.cyScreen - 8)/2;
pMe->cxScreen = deviceInfo.cxScreen;
pMe->cyScreen = deviceInfo.cyScreen;
SETAEERECT(&rc,pMe->x,pMe->y,8,8);
IDISPLAY_DrawRect(pMe->a.m_pIDisplay,&rc,0xff000000,0x00ff0000,IDF_RECT_FRAME|IDF_RECT_FILL);
IDISPLAY_Update (pMe->a.m_pIDisplay);
return(TRUE);
// App is told it is exiting
case EVT_APP_STOP:
// Add your code here...
return(TRUE);
// App is being suspended
case EVT_APP_SUSPEND:
// Add your code here...
return(TRUE);
// App is being resumed
case EVT_APP_RESUME:
// Add your code here...
return(TRUE);
// An SMS message has arrived for this app. Message is in the dwParam above as (char *)
// sender simply uses this format "//BREW:ClassId:Message", example //BREW:0x00000001:Hello World
case EVT_APP_MESSAGE:
// Add your code here...
return(TRUE);
// A key was pressed. Look at the wParam above to see which key was pressed. The key
// codes are in AEEVCodes.h. Example "AVK_1" means that the "1" key was pressed.
case EVT_KEY:
SETAEERECT(&rc,pMe->x,pMe->y,8,8);
IDISPLAY_DrawRect(pMe->a.m_pIDisplay,&rc,0xffffff00,0xffffff00,IDF_RECT_FRAME|IDF_RECT_FILL);
switch(wParam)
{
case AVK_UP:
case AVK_2:
pMe->y -=4;
break;
case AVK_DOWN:
case AVK_8:
pMe->y +=4;
break;
case AVK_LEFT:
case AVK_4:
pMe->x -=4;
break;
case AVK_RIGHT:
case AVK_6:
pMe->x +=4;
break;
default:
return FALSE;
}
pMe->x = Max(0, Min(pMe->x, pMe->cxScreen - 8));
pMe->y = Max(0, Min(pMe->y, pMe->cyScreen - 8));
SETAEERECT(&rc,pMe->x,pMe->y,8,8);
IDISPLAY_DrawRect(pMe->a.m_pIDisplay,&rc,0xff000000,0x00ff0000,IDF_RECT_FRAME|IDF_RECT_FILL);
IDISPLAY_Update (pMe->a.m_pIDisplay);
return(TRUE);
default:
break;
}
return FALSE;
}
// this function is called when your application is starting up
boolean keymove_InitAppData(keymove* pMe)
{
// Get the device information for this handset.
// Reference all the data by looking at the pMe->DeviceInfo structure
// Check the API reference guide for all the handy device info you can get
pMe->DeviceInfo.wStructSize = sizeof(pMe->DeviceInfo);
ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->DeviceInfo);
// Insert your code here for initializing or allocating resources...
// if there have been no failures up to this point then return success
return TRUE;
}
// this function is called when your application is exiting
void keymove_FreeAppData(keymove* pMe)
{
// insert your code here for freeing any resources you have allocated...
// example to use for releasing each interface:
// if ( pMe->pIMenuCtl != NULL ) // check for NULL first
// {
// IMENUCTL_Release(pMe->pIMenuCtl) // release the interface
// pMe->pIMenuCtl = NULL; // set to NULL so no problems trying to free later
// }
//
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -