【转】捕捉菜单打开和关闭事件

来源:互联网 发布:修图软件 编辑:程序博客网 时间:2024/06/05 01:08

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();
        }
    }

原创粉丝点击