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

📄 keymove.c

📁 这是一个关于图像的按键的BREW的程序
💻 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 + -