- C/C++ code
case EVT_APP_SUSPEND: // Add your code here... return(TRUE);case EVT_APP_RESUME: // Add your code here... return(TRUE);
这两个消息,怎么在处理EVT_APP_RESUME的时候,把界面还原到EVT_APP_SUSPEND消息来的时候的界面?
------解决方案--------------------------------------------------------
// 宏定义
#define RELEASEIF(pi) { if (pi) { IBASE_Release((IBase*)(pi)); (pi)=0; }}
// 用于屏幕保存与恢复,定义在应用数据结构中
IBitmap *m_pScreenBitmap;
AEEDeviceInfo deviceInfo;
// 在应用初始化中加入
pMe->deviceInfo.wStructSize = sizeof(pMe->deviceInfo);
ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->deviceInfo);
// App is being suspended
case EVT_APP_SUSPEND:
// 保存屏幕
SaveScreen(pMe, &pMe->m_pScreenBitmap);
return(TRUE);
// App is being resumed
case EVT_APP_RESUME:
// 恢复屏幕
RestoreScreen(pMe, pMe->m_pScreenBitmap);
return(TRUE);
// 保存屏幕
void SaveScreen(CBasicApp *pMe, IBitmap **ppScreenBitmap)
{
IBitmap *pBitmapDisplay = NULL;
IDISPLAY_GetDeviceBitmap( pMe->pIDisplay, &pBitmapDisplay );
if(pBitmapDisplay)
{
IBITMAP_CreateCompatibleBitmap( pBitmapDisplay,
ppScreenBitmap,
pMe->deviceInfo.cxScreen,
pMe->deviceInfo.cyScreen);
if(*ppScreenBitmap)
{
IBitmap_BltIn(*ppScreenBitmap,
0,
0,
pMe->deviceInfo.cxScreen,
pMe->deviceInfo.cyScreen,
pBitmapDisplay,
0,
0,
AEE_RO_COPY);
}
IBITMAP_Release(pBitmapDisplay);
}
}
// 恢复屏幕
void RestoreScreen(CBasicApp *pMe, IBitmap *pScreenBitmap)
{
if(pScreenBitmap)
{
IDISPLAY_BitBlt(pMe->pIDisplay,
0,
0,
pMe->deviceInfo.cxScreen,
pMe->deviceInfo.cyScreen,
pScreenBitmap,
0,
0,
AEE_RO_COPY);
IDisplay_Update(pMe->pIDisplay);
RELEASEIF(pScreenBitmap);
}
}