win7多点触摸开发心得

    技术2022-05-19  24

           win7 触摸屏系统应用广泛,软件操作方便,功能强大,现以被许多硬件厂商应用。 我曾用一台装有win7 的汉王平板电脑进行了多点触摸软件的开发。

            开发环境及条件: 

                           1. 汉王平板电脑+ win7触摸系统

                           2. 编译平台  win7+vs2010 。(我在xp上没有编译成功过,但win7+vs2010是能够编译成功的)

           需要用到的函数:

                            1.    检测该系统有没有触摸硬件设备或是否就绪

                              BYTE digitizerStatus =(BYTE)GetSystemMetrics(SM_DIGITIZER);                          if((digitizerStatus &(0x80 + 0x40)) == 0)                          {                            AfxMessageBox("没检测到多点触控设备或设备没有就绪");                          }

                            2.  注册接受触摸消息的窗口,使该窗口能接收WM_TOUCH消息

                              RegisterTouchWindow(hwnd,0)

                            3.  获取触摸点数,及该点的坐标信息

                              GetTouchInputInfo((HTOUCHINPUT)lParam,numInputs,ti,sizeof(TOUCHINPUT))

                               

      实例代码:

        LRESULT CALLBACK WinProc1(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)     {         LRESULT bRet;        if(uMsg==WM_GESTURE)       {                   if(!g_bTouch)           {              RegisterTouchWindow(hwnd,0);                g_bTouch=TRUE;             }        }      if(uMsg==WM_TOUCH)     {                 numInputs =(int)wParam;            TOUCHINPUT *ti= new TOUCHINPUT[numInputs];            if(GetTouchInputInfo((HTOUCHINPUT)lParam,numInputs,ti,sizeof(TOUCHINPUT)))            {                 if(numInputs==1)  //单向拖动               {              

                        if(ti[0].dwFlags &TOUCHEVENTF_DOWN)

                        {

                           //记录按下坐标

                        }

                        if(ti[0].dwFlags &TOUCHEVENTF_DOWN)

                        {

                           //记录松开坐标

                               从坐标可以分析出拖动方向方位,可进行翻页等应用

                        }     

                   }

                   else if(numInputs==2)  //两点缩放

                   {

                       if((ti[0].dwFlags &TOUCHEVENTF_DOWN)&&(ti[1].dwFlags &TOUCHEVENTF_DOWN))

                         {

                              //获取按下去两点坐标

                         }

                       if((ti[0].dwFlags &TOUCHEVENTF_MOVE)&&(ti[1].dwFlags &TOUCHEVENTF_MOVE))

                        {

                             //拖动时两点坐标

                         }

                         if((ti[0].dwFlags &TOUCHEVENTF_UP)||(ti[1].dwFlags &TOUCHEVENTF_UP))

                        {

                            //松手时两点坐标。

                             //根据不同状态下的坐标进行相关应用。。。

                        }

                 

                   }

                 CloseTouchInputHandle((HTOUCHINPUT)lParam);             delete []ti;             bRet=0; 

           }

     

    }

     

     

           


    最新回复(0)