重力感应
此示例代码展示如何使用重力感应(AccApi)。
通过改变手机的位置,屏幕中的两个按钮控件分别在X轴,Y轴上运动
开启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;