http://www.devdiv.net/bbs/thread-6066-1-1.html 开发伙伴平台: S60 3rd Edition
详细描述 这个代码片段演示了如何在CAknAppUi派生类中捕捉菜单打开和关闭事件。这些事件可通过MEikEemuObserver中派生的SetEmphasis()方法来捕捉。如当一个游戏打开菜单而需要暂停时,就需要捕捉这样的事件。
此代码可以通过自签名来完成。
MMP文件 需要下列链接库
LIBRARY avkon.lib //Avkon resources头文件 #ifndef __TESTAAPPUI_H__ #define __TESTAAPPUI_H__
// INCLUDES #include <aknappui.h>
// FORWARD DECLARATIONS class CTestAAppView; //class CGameEngine;
// CLASS DECLARATION /** * CTestAAppUi application UI class. */ class CTestAAppUi : public CAknAppUi { //... private: // from MEikMenuObserver void SetEmphasis(CCoeControl* aMenuWindow,TBool aEmphasis); //... //Pauses the application if menu is activated void SetUiPauseState(TBool aEmphasis); private: // Data
//The application view CTestAAppView* iAppView;
//The pointer to the game engine //CGameEngine* iEngine; };
#endif //__TESTAAPPUI_H__
源文件 #include "TestAAppUi.h" #include "TestAAppView.h"
//...
// From MEikMenuObserver. Menu emphasising or de-emphasising function. void CTestAAppUi::SetEmphasis(CCoeControl* /*aMenuWindow*/, TBool aEmphasis) { if(iAppView) { SetUiPauseState(aEmphasis); } }
void CTestAAppUi::SetUiPauseState(TBool aEmphasis) {
//pause game if menu is activated if(aEmphasis /*&& !iEngine->IsStopped()*/) { //this debug line works only in the emulator //iEikonEnv->InfoMsg(_L("stop")); //iEngine->StopGame(); } else { //this debug line works only in the emulator //iEikonEnv->InfoMsg(_L("start")); //iEngine->StartGame(); } } |