重力感应(01_AccApi)

重力感应

此示例代码展示如何使用重力感应(AccApi)。

通过改变手机的位置,屏幕中的两个按钮控件分别在X轴,Y轴上运动

01_AccApi.png
 开启Acc设备,获得XYZ轴加速度值:
    

    signed char m_XAxis ;
    signed char m_YAxis;
    signed char m_ZAxis;

    //开启acc功能
    MzAccOpen();  

    //获取XYZ轴加速度值 1 == 18mg, 56 == 1g 
    MzAccGetXYZ(&m_XAxis, &m_YAxis, &m_ZAxis);
 处理得到的加速度值:
    

    //设置定时器每隔一段时间获取一次加速度值
    SetTimer(m_hWnd, 10, 10, NULL);  

    //分别说的X,Y轴的加速度值,再做出计算
    virtual void OnTimer(UINT_PTR nIDEvent)
    {
        switch(nIDEvent)
        {
            case 10:
            {
                //获得X轴加速度
                MzAccGetX(&m_XAxis);
                //获得Y轴加速度
                MzAccGetY(&m_YAxis);

                //计算控件的位置
                m_XPos = m_XPos + m_XSpeed + m_XAxis;
                if (m_XPos<0)
                {
                m_XPos = 0;
                }

                if (m_XPos>GetWidth() - m_XButton.GetWidth())
                {
                m_XPos = GetWidth() - m_XButton.GetWidth();
                SetTimer(m_hWnd, 11, 10, NULL);
                }

                m_YPos = m_YPos + m_YSpeed + m_YAxis;
                if (m_YPos<0)
                {
                m_YPos = 0;
                }

                if (m_YPos>600)
                {
                m_YPos = 600;
                }

                //重新设定控件的位置
                m_XButton.SetPos(m_XPos, 300, 150, 100);
                m_YButton.SetPos(200, m_YPos, 150, 100);
                Invalidate();
            }
            break;
            default:
            {
            }
            break;
        }
    }

完整示例

/************************************************************************/
/*
* 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 <acc_api.h>
#include <MotorVibrate.h>
//此代码演示了:
//  创建和初始化应用程序
//  创建和初始化窗体
//  按钮控件的使用及其命令消息的处理
//  acc_api的使用

// 按钮控件的ID
#define MZ_IDC_EXITBTN  101

// 从 CMzWndEx 派生的主窗口类
class CSample1MainWnd: public CMzWndEx
{
  MZ_DECLARE_DYNAMIC(CSample1MainWnd);
public:
  // 窗口中的按钮控件
  UiButton m_XButton;
  UiButton m_YButton;
  UiButton m_ExitBtn;

  signed char m_XAxis ;
  signed char m_YAxis;
  signed char m_ZAxis;
  int m_XPos;
  int m_XSpeed;

  int m_YPos;
  int m_YSpeed;
protected:
  // 窗口的初始化
  virtual BOOL OnInitDialog()
  {
    // 必须先调用基类的初始化
    if (!CMzWndEx::OnInitDialog())
    {
      return FALSE;
    }

    //开启acc功能
    MzAccOpen();  

      //获取XYZ轴加速度值 1 == 18mg, 56 == 1g 
    MzAccGetXYZ(&m_XAxis, &m_YAxis, &m_ZAxis);

    SetTimer(m_hWnd, 10, 10, NULL);  

    //设置初始的速度和位置
    m_XPos = 200;
    m_XSpeed = 0;

    m_YPos = 280;
    m_YSpeed = 0;

    m_XButton.SetPos(m_XPos, 300, 150, 100);
    AddUiWin(&m_XButton);

    m_YButton.SetPos(200, m_YPos, 150, 100);
    AddUiWin(&m_YButton);

    m_ExitBtn.SetID(MZ_IDC_EXITBTN);
    m_ExitBtn.SetPos(100, 500, 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;
    }
  }
    
  virtual void OnTimer(UINT_PTR nIDEvent)
  {
    switch(nIDEvent)
    {
    case 10:
      {
        //获得X轴加速度
        MzAccGetX(&m_XAxis);
        //获得Y轴加速度
        MzAccGetY(&m_YAxis);

        //计算控件的位置
        m_XPos = m_XPos + m_XSpeed + m_XAxis;
        if (m_XPos<0)
        {
          m_XPos = 0;
        }

        if (m_XPos>GetWidth() - m_XButton.GetWidth())
        {
          m_XPos = GetWidth() - m_XButton.GetWidth();
          SetTimer(m_hWnd, 11, 10, NULL);
        }

        m_YPos = m_YPos + m_YSpeed + m_YAxis;
        if (m_YPos<0)
        {
          m_YPos = 0;
        }

        if (m_YPos>600)
        {
          m_YPos = 600;
        }

        //重新设定控件的位置
        m_XButton.SetPos(m_XPos, 300, 150, 100);
        m_YButton.SetPos(200, m_YPos, 150, 100);
        Invalidate();
      }
      break;
    default:
      {
      }
      break;
    }
  }
};

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