红外感应(02_IRSensor)

红外感应

此示例代码展示如何使用红外感应(IRSensor)。

将障碍物放置于手机听筒上方时,背景灯将会熄灭,三秒钟后自动亮起

02_IRSensorApi1.png
02_IRSensorApi2.png
 启用红外感应设备:
    

    //启用设备
    SetIRSensorState(true);
    //注册红外感应消息
    RegisterIRSensorNotify(m_hWnd, MZ_IRSENSORID);
 获得红外感应强度等级:
    

    IRSensorLevel = GetIRSensorLevel();

完整示例

/************************************************************************/
/*
* Copyright (C) Meizu Technology Corporation Zhuhai China
* All rights reserved.
* 中国珠海, 魅族科技有限公司, 版权所有.
*
* Author:    ZYK
* Create on: 2009-07-03
*/
/************************************************************************/

//请按照以步骤运行此实例代码:
//首先, 打开VS2005/2008创建一个Win 32智能设备项目
//在项目向导中选择M8SDK, 并勾选空项目
//然后,在项目中新建一个cpp文件,将此处代码拷贝到cpp文件中
//最后,按照M8SDK的帮助文档,配置项目属性
//现在,可以运行此程序了

//包含MZFC库的头文件
#include <mzfc_inc.h>
#include <IRSensorApi.h>
#include <BackLightApi.h>

//此代码演示了:
//  创建和初始化应用程序
//  创建和初始化窗体
//  红外探测IRSensorAPI的使用
//  背景光BackLightAPI的使用
//  将障碍物放置于听筒上方时会关闭背景光
#define MZ_IDC_IRSENSORBTN  101
#define MZ_IRSENSORID       102
#define MZ_IDC_EXITBTN    103
// 从 CMzWndEx 派生的主窗口类
class CSample1MainWnd: public CMzWndEx
{
  MZ_DECLARE_DYNAMIC(CSample1MainWnd);
public:
  UiButton m_IRSensorBtn;
  UiButton m_ExitBtn;
protected:
  // 窗口的初始化
  virtual BOOL OnInitDialog()
  {
    // 必须先调用基类的初始化
    if (!CMzWndEx::OnInitDialog())
    {
      return FALSE;
    }
    SetIRSensorState(true);
    RegisterIRSensorNotify(m_hWnd, MZ_IRSENSORID);

    m_IRSensorBtn.SetPos(100, 150, 280, 100);
    m_IRSensorBtn.SetID(MZ_IDC_IRSENSORBTN);
    m_IRSensorBtn.SetText(L"关闭红外感应");

    AddUiWin(&m_IRSensorBtn);

    m_ExitBtn.SetID(MZ_IDC_EXITBTN);
    m_ExitBtn.SetPos(100, 350, 280, 100);
    m_ExitBtn.SetText(L"退出");

    AddUiWin(&m_ExitBtn);
    return TRUE;
  }

  // 重载命令消息的处理函数
  virtual void OnMzCommand(WPARAM wParam, LPARAM lParam)
  {
    UINT_PTR id = LOWORD(wParam);
    switch(id)
    {
    case MZ_IDC_EXITBTN:
      {
        if(1 == MzMessageBoxEx(m_hWnd, L"You have pressed Exit button, Really want exit?", L"Exit", MB_YESNO, false))
          PostQuitMessage(0);
      }
      break;
    case MZ_IDC_IRSENSORBTN:
      {
        if ( wcscmp(L"关闭红外感应", m_IRSensorBtn.GetText()) == 0)
        {
          m_IRSensorBtn.SetText(L"打开红外感应");
          m_IRSensorBtn.Invalidate();
          m_IRSensorBtn.Update();

           if (!UnRegisterIRSensorNotify(m_hWnd))
           {
             MzMessageBoxEx(m_hWnd,L"注销红外感应消息失败",L"警告");
           }

          if (!SetIRSensorState(false))
          {
            //MzMessageBoxEx(m_hWnd,L"关闭红外感应失败",L"警告");
          }
        } 
        else if ( wcscmp(L"打开红外感应", m_IRSensorBtn.GetText()) == 0)
        {
          m_IRSensorBtn.SetText(L"关闭红外感应");
          m_IRSensorBtn.Invalidate();
          m_IRSensorBtn.Update();
        
          if (!SetIRSensorState(true))
          {
            MzMessageBoxEx(m_hWnd,L"打开红外感应失败",L"警告");
          }

           if (!RegisterIRSensorNotify(m_hWnd, MZ_IRSENSORID))
           {
             MzMessageBoxEx(m_hWnd, L"RegisterIRSensorNotify false", L"alert");
           }
            
          if (!SetIRSensorLevel(LEVEL_HIGH))
          {            
            MzMessageBoxEx(m_hWnd, L"SetIRSensorLevel false", L"alert");
          }
          int IRSensorLevel ;

          
          IRSensorLevel = GetIRSensorLevel();

          if (IRSensorLevel == LEVEL_HIGH)
          {
            MzMessageBoxEx(m_hWnd, L"红外探测等级:高", L"消息");
          } 
          else if (IRSensorLevel == LEVEL_MEDIUM)
          {
            MzMessageBoxEx(m_hWnd, L"红外探测等级:中", L"消息");
          }
          else if (IRSensorLevel == LEVEL_LOW)
          {
            MzMessageBoxEx(m_hWnd, L"红外探测等级:低", L"消息");
          }  
        }
      }
      break;
    }
  }

    LRESULT MzDefWndProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
     switch(message)
     {
     case MZ_IRSENSORID:
       {
         if (lParam)
         {
            //关闭背景光
            SetBackLightState(false);
         }
         else
         {
            //打开背景光
            SetBackLightState(true);
          }
       }
       break;
     default:
       {
         return CMzWndEx::MzDefWndProc(message, wParam, lParam);
       }
         break;
     }
     return 0;
    }
};

MZ_IMPLEMENT_DYNAMIC(CSample1MainWnd)

// 从 CMzApp 派生的应用程序类
class CSample1App: public CMzApp
{
public:
  // 应用程序的主窗口
  CSample1MainWnd m_MainWnd;

  // 应用程序的初始化
  virtual BOOL Init()
  {
    // 初始化 COM 组件
    CoInitializeEx(0, COINIT_MULTITHREADED);

    // 创建主窗口
    RECT rcWork = MzGetWorkArea();
    m_MainWnd.Create(rcWork.left,rcWork.top,RECT_WIDTH(rcWork),RECT_HEIGHT(rcWork), 0, 0, 0);
    m_MainWnd.Show();

    // 成功则返回TRUE
    return TRUE;
  }
};

// 全局的应用程序对象
CSample1App theApp;


Generated at Tue Feb 9 15:09:55 2010 for Meizu M8 SDK Documentation by  doxygen 1.6.1