触摸屏(04_TouchNotifyAPi)

触摸屏消息

此示例代码展示如何使用两点触摸(TouchNotifyAPi)。

两只手指同时点击屏幕时,按钮控件会随着手指移动

04_TouchNotifyAPi.png
 注册触摸消息:
    

    if(RegisterTouchNotifyEx(m_hWnd, MZ_TOUCH, TCH_NOTIFY_FLAG_GESTURE) == FALSE)
    {
    MzMessageBoxEx(m_hWnd, L"注册失败!", L"注册触摸", MB_OK, false);
    }
 处理得到的消息:
    

    LRESULT MzDefWndProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
        TOUCH_RAW_DATA trData;
        switch(message)
        {
            case MZ_TOUCH:
            {
                AddUiWin(&m_btn1);
                AddUiWin(&m_btn2);

                GetTouchRawData(&trData);

                m_X1Pos = trData.FingerData[0].x;
                m_Y1Pos = trData.FingerData[0].y;

                m_X2Pos = trData.FingerData[1].x;
                m_Y2Pos = trData.FingerData[1].y;

                m_btn1.SetPos(m_X1Pos, m_Y1Pos, 100, 100);
                m_btn2.SetPos(m_X2Pos, m_Y2Pos, 100, 100);
                Invalidate();       
            }
            break;
            default:
            {
                return CMzWndEx::MzDefWndProc(message, wParam, lParam);
            }
            break;
            }
            return 0;
        }
    };

完整示例

/************************************************************************/
/*
* 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 <TouchNotifyApi.h>

//此代码演示了:
//  创建和初始化应用程序
//  创建和初始化窗体
//  按钮控件的使用及其命令消息的处理

#define  MZ_IDC_EXITBTN 101
#define MZ_TOUCH    102


// 从 CMzWndEx 派生的主窗口类
class CSample1MainWnd: public CMzWndEx
{
  MZ_DECLARE_DYNAMIC(CSample1MainWnd);
public:
  UiButton m_btn1;
  UiButton m_btn2;
  UiButton m_btn3;

  int m_X1Pos;
  int m_Y1Pos;
  int m_X2Pos;
  int m_Y2Pos;
protected:


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

    if(RegisterTouchNotifyEx(m_hWnd, MZ_TOUCH, TCH_NOTIFY_FLAG_GESTURE) == FALSE)
    {
      MzMessageBoxEx(m_hWnd, L"注册失败!", L"注册触摸", MB_OK, false);
    }

    // 初始化窗口中的控件
    
    m_btn1.SetPos(m_Y1Pos, m_Y2Pos, 100, 100);
    m_btn2.SetPos(m_X2Pos, m_Y2Pos, 100, 100);

    m_btn3.SetID(MZ_IDC_EXITBTN);
    m_btn3.SetPos(100, 600, 280, 100);
    m_btn3.SetText(L"退出");

    AddUiWin(&m_btn3);
    return TRUE;
  }

  // 重载命令消息的处理函数
  virtual void OnMzCommand(WPARAM wParam, LPARAM lParam)
  {
    UINT_PTR id = LOWORD(wParam);
    switch(id)
    {
    case MZ_IDC_EXITBTN:
      {
        UnRegisterTouchNotify(m_hWnd, 0);
        if(1 == MzMessageBoxEx(m_hWnd, L"You have pressed Exit button, Really want exit?", L"Exit", MB_YESNO, false))
          PostQuitMessage(0);
      }
      break;
    }
  }

  LRESULT MzDefWndProc(UINT message, WPARAM wParam, LPARAM lParam)
  {
    TOUCH_RAW_DATA trData;
    switch(message)
    {
    case MZ_TOUCH:
      {
        AddUiWin(&m_btn1);
        AddUiWin(&m_btn2);

        GetTouchRawData(&trData);

        m_X1Pos = trData.FingerData[0].x;
        m_Y1Pos = trData.FingerData[0].y;

        m_X2Pos = trData.FingerData[1].x;
        m_Y2Pos = trData.FingerData[1].y;

        m_btn1.SetPos(m_X1Pos, m_Y1Pos, 100, 100);
        m_btn2.SetPos(m_X2Pos, m_Y2Pos, 100, 100);
        Invalidate();       
      }
      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