亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tchstub.cpp

?? 觸摸屏驅動的程序
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
           iPut = 0;

         ptq->iPut = iPut;
          
		 SetEvent(g_hTabletEvent);
      }
   else
   {  
	   _bIgnoreStroke = TRUE;
	   DEBUGMSG(1,(TEXT("Outer Queue overrun!\n\r")));
   }

   ReleaseMutex(hQ1Mutex);

#ifdef DEBUG1	// Print an error message if we ever see iPut not incremented 
			    //  (happens in cache problem situations.)
   {
    TCHAR str[128];
	
	// calling wsprintf just for the side effect to attempt a cache flush
	wsprintf(str, L"%s -- %d", L"Hello there!", 123);
   
	
	str[0] = (TCHAR)ptq->iPut;

    if (ptq->iPut != iPut) OutputDebugString(L"iPut != ptq->iPut !!!\n");
   }
#endif

}


/* *********************************************************************************************** */
// This posts the point on the internal touch driver queue (Q2)
void SendPtToSelf(int iFlags, int iX, int iY)
{
 int iGet = 0;
 int iPut = 0;
 int i;

   if(_bIgnoreStroke2 &&
      (iFlags&TouchSamplePreviousDownFlag)!=0)
      {
        return; 
      }

   EnterCriticalSection(&Q2CritSect);

   iGet = tq2.iGet;
   iPut = tq2.iPut;
   
   if((iFlags&TouchSampleDownFlag)!=0)
      i = iGet - 3;
   else
      i = iGet - 2;

   // if there are at least 2 or 3 elements left for writing in the circular buffer (depn on iFlags)
   //  but why 2 or 3???  Does iGet not represent the real read pointer for the queue?
   //  perhaps we keep 2 or 3 old points available at all times in case we need them
   //  or maybe the code used to use them, but doesn't anymore
   if(iPut<i ||
      (iPut>=iGet && iPut<i+MAX_TOUCHQUEUE))
      {
         _bIgnoreStroke2 = FALSE;

         tq2.elems[iPut][0]=iFlags;
         tq2.elems[iPut][1]=((iX<<16)|iY);
//         if((iFlags&TouchSampleDownFlag)==0)
//            PostMessage(_hClientWnd, WM_PEGREC_TABLETEND, iPut, 0);
         iPut++;
         if(iPut>=MAX_TOUCHQUEUE)
           iPut = 0;
         tq2.iPut = iPut;

		 // if both this point and the last point were pen down
         if((iFlags&(TouchSampleDownFlag|TouchSamplePreviousDownFlag))==
             (TouchSampleDownFlag|TouchSamplePreviousDownFlag))
            {
             int iiX = (iX>>3);
             int iiY = (iY>>3);
               if(iiX != _iLastSelfX || 
                  iiY != _iLastSelfY || 
                  _iInRow >10)
                  {
                     SetEvent(g_hInnerEvent);
                     _iInRow = 0;
                  }
               else
                  _iInRow++;
            }
         else
            {
               SetEvent(g_hInnerEvent);
               _iInRow = 0;
            }
      }
   else
   {
      _bIgnoreStroke2 = TRUE;
#ifdef DEBUG
      OutputDebugString(TEXT("Inner Queue Overrun!\n")); 
#endif
   }

   LeaveCriticalSection(&Q2CritSect);

}


/* *********************************************************************************************** */

LPVOID TouchGetQueuePtr()
{
   return ptq; //_pTouchQueue; //&tq;
}

BOOL IsStubWndExist()
{
   if(*_phStubWnd!=NULL || (*_phStubWnd=FindWindow(TOUCHSTUB_WNDCLASSNAME, NULL))!=NULL)
      return TRUE;
   else
      return FALSE;
}

HWND TouchGetFocusWnd()
{
   if(IsStubWndExist())
      return (HWND)SendMessage(*_phStubWnd, WM_STUB_GETFOCUSWND, 0, 0);
   return NULL;
}

HWND TouchGetLastTouchFocusWnd()
{
   if(IsStubWndExist())
      return (HWND)SendMessage(*_phStubWnd, WM_STUB_GETLASTTOUCHFOCUSWND, 0, 0);
   return NULL;
}

void TouchReset(BOOL bSetAllValuesToDefault)
{
   if(IsStubWndExist())
      SendMessage(*_phStubWnd, WM_STUB_RESET, bSetAllValuesToDefault, 0);
}

void TouchCreateEvent(int iX, int iY)
{
   if(IsStubWndExist())
      SendMessage(*_phStubWnd, WM_STUB_EVENT, iX, iY);
}

void TouchCreateEventInternal(int begX, int begY)
{
   if(v_pfnCgrPointCallback==NULL)
      return;
   (*v_pfnCgrPointCallback)(0x07, begX+1, begY+1);
   (*v_pfnCgrPointCallback)(0x0f, begX, begY);
   (*v_pfnCgrPointCallback)(0x0f, begX, begY);
   (*v_pfnCgrPointCallback)(0x0f, begX, begY);
   (*v_pfnCgrPointCallback)(0x0D, begX, begY);
   (*v_pfnCgrPointCallback)(0x05, begX, begY);
}

HWND TouchGetRegisteredWindow()
{
   return _hClientWnd;
}

BOOL TouchRegisterWindow(HWND hClientWnd)
{
	// set up permissions so we can access the buffer in the touch driver
	//  (which might be in slot 4, for example, while Tscriber is in slot 8)

	ptq->iPut = ptq->iGet =0;
	tq2.iPut = tq2.iGet =0;

	// zero out the shared memory queue
	memset((void*) ptq, 0, sizeof(TOUCH_QUEUE));

	if(IsStubWndExist() && SendMessage(*_phStubWnd, WM_STUB_REGISTWND, (WPARAM)hClientWnd, 0))
		return TRUE;
	else
		return FALSE;
}

void TouchUnregisterWindow(HWND hClientWnd)
{
	if(IsStubWndExist())
        SendMessage(*_phStubWnd, WM_STUB_UNREGISTWND, (WPARAM)hClientWnd, 0);
}

void TouchSetValue(DWORD dwName, DWORD dwValue)
{
   if(IsStubWndExist())
      SendMessage(*_phStubWnd, WM_STUB_SETVALUE, dwName, dwValue);
}

LRESULT TouchGetValue(DWORD dwName, DWORD dwValue)
{
   if(IsStubWndExist())
      return SendMessage(*_phStubWnd, WM_STUB_GETVALUE, dwName, dwValue);
   return 0;
}


/* ************************************************************************** */
// this is where we get points from the hardware
BOOL
CgrCallback(
	TOUCH_PANEL_SAMPLE_FLAGS	Flags,
	INT	X,
	INT	Y
    )
{
 DWORD dwTick;
 TOUCH_PANEL_SAMPLE_FLAGS FlagsToDll = Flags, FlagsToWnd = Flags;
#ifdef DEBUG1
 TCHAR str[100];
#endif

#if WRITE_STATISTICSLOG // define to log all points we get from hardware into a txt file
{
  static int _iStatWrites = 0;
  static int _iStatCurrent = 0;
  static short _iStatBuf[MAX_STATS][3] = {0};

if(_iStatWrites<=MAX_WRITES)
   {
    static int count = 0;

      _iStatBuf[_iStatCurrent][0] = (short)Flags;
      _iStatBuf[_iStatCurrent][1] = (short)X;
      _iStatBuf[_iStatCurrent][2] = (short)Y;
      _iStatCurrent++;
      
	  if(_iStatCurrent==MAX_STATS)
         {
          HANDLE hFile = INVALID_HANDLE_VALUE;
          int i;

 
		  
		  _iStatCurrent = 0;

             hFile = CreateFile(L"\\tchlog.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
             if(hFile!=INVALID_HANDLE_VALUE)
                {
                 DWORD dw = 0;
				 int   len;
				 int   j;
      
				 SetFilePointer(hFile, 0, NULL, FILE_END);

				   for (i = 0; i < MAX_STATS; i++)
				   {
				    TCHAR str[64];
					unsigned char str2[64];

                    wsprintf(str, L"%d %d %d %d %c%c", count++, (int)_iStatBuf[i][1], (int)(3000 - _iStatBuf[i][2]), (int)_iStatBuf[i][0], (TCHAR)13, (TCHAR)10); 
  		            
					len = _tcslen(str); 
					if(len > 62) 
						len = 62;

					for (j = 0; j < len; j ++) 
						str2[j] = (unsigned char)str[j]; 
					str2[len] = 0;
					
					WriteFile(hFile, str2, len, &dw, NULL);

				   }

                   CloseHandle(hFile);
                }

             _iStatWrites++;
         }
   }
}
#endif

#ifdef DEBUG1
	wsprintf(str, TEXT(" *** StubCallback (%d,%d) *** \n"), X, Y);
	OutputDebugString( str);
#endif


#ifdef DEBUGTOUCH

    static int		nPointSkips;    				// incr if point more than 10 pixels away in x or y
    static int      nLongIntervalCount;				// incr if time between points is greater than some threshold
    static int      nLongIntervalSum;  				// total length of all the long intervals we see
    static long     nStrokeStartTick;               // when did this stroke start
    static long		nLastTimerTick;                 // time the last point was seen at
    static int		sampleCount;                    // number of points seen since the pen went down
    static long     nPointSkipSum;                  // how many total point skip distances
    long            nTicksNow;
    long            samplesPerSecond;
    long            nLongIntervalAvg;               // how long was the average long interval
    long            nPointSkipAvg;                  // how many total point skip distances
    long            deltaX;
    long            deltaY;
    long            ptIndex;
    static POINT	ptBuf[2];                       // point buffer for testing latentcy and throughput

    // test for first point, middle point, or end point
    // (ex - pen up points: wacom pens send points when above the tablet for cursor hovering)

    // if first point
    //  Set sample count to 1
    //  get strokeStartTick and lastTimerTick time
    //  store first sample
    //  initialize accumulator variables
    if ((0 == (Flags&TouchSamplePreviousDownFlag)) &&       // if previous sample is pen up
        (0 != (Flags&TouchSampleDownFlag))            )     //  and this sample is pen down
    {
        nStrokeStartTick = GetTickCount();
        nLastTimerTick = nStrokeStartTick;
        ptBuf[0].x = X;
        ptBuf[0].y = Y;
        sampleCount = 1;
        nLongIntervalSum = 0;
        nLongIntervalCount = 0;
        nPointSkips = 0;
        nPointSkipSum = 0;
    }

    // if middle point or end point
    //  get time
    //  store sample
    //  samplecount++
    //  check for time lag between samples
    //  check for point jumps
    if (0 != (Flags&TouchSamplePreviousDownFlag))     // if the previous sample was pen down
                                                    //  and this sample is either pen down or pen up
    {
        nTicksNow = GetTickCount();
        ptIndex = sampleCount % 2;
        ptBuf[ptIndex].x = X;
        ptBuf[ptIndex].y = Y;
        sampleCount++;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色播五月激情综合网| 欧美韩国一区二区| 久久婷婷综合激情| 亚洲一级二级三级| 国产主播一区二区| 欧美伦理视频网站| 尤物视频一区二区| 国产成人鲁色资源国产91色综| 色婷婷av一区二区三区gif| 欧美精品一区二区不卡| 亚洲第一电影网| 色哟哟一区二区| 国产亚洲精品超碰| 久久精品国产亚洲5555| 欧美视频一区在线观看| 国产精品欧美精品| 国产在线播精品第三| 91精选在线观看| 亚洲自拍偷拍欧美| 97久久精品人人爽人人爽蜜臀| 久久久亚洲午夜电影| 久久国产婷婷国产香蕉| 91精品国产日韩91久久久久久| 一区二区日韩电影| 91蝌蚪国产九色| 国产精品少妇自拍| 成人午夜私人影院| 国产日韩欧美激情| 高清在线不卡av| 国产视频一区二区在线| 国产在线精品一区二区不卡了| 91精品国产色综合久久ai换脸| 一区二区三区高清| 本田岬高潮一区二区三区| 久久精品人人做人人综合 | 日本精品一区二区三区高清 | 国产精品久久久久一区二区三区| 国产乱子轮精品视频| 欧美成人国产一区二区| 久久精品二区亚洲w码| 精品国精品国产| 国产风韵犹存在线视精品| 国产午夜精品一区二区| 成人国产在线观看| 亚洲综合色视频| 欧美日韩高清在线| 另类中文字幕网| 久久久久久久综合日本| 成人动漫在线一区| 一区二区三区国产精品| 91精品国产91热久久久做人人 | 欧美久久久一区| 日av在线不卡| 久久免费国产精品| 99久久精品免费| 亚洲国产另类av| 精品国产一区二区三区久久久蜜月| 国内精品视频666| 国产欧美日韩综合| 欧美亚洲国产一区在线观看网站| 午夜精品123| 久久蜜桃av一区精品变态类天堂 | 成人黄色电影在线| 亚洲香肠在线观看| 久久伊99综合婷婷久久伊| 成人va在线观看| 五月婷婷色综合| 久久精品亚洲一区二区三区浴池| 91一区二区在线| 青草av.久久免费一区| 欧美激情在线看| 777xxx欧美| 成人一道本在线| 麻豆一区二区三区| 亚洲欧美日韩一区| 26uuu亚洲| 欧美综合久久久| 国产一区二区精品久久91| 亚洲激情图片小说视频| 26uuu色噜噜精品一区二区| 色视频成人在线观看免| 韩国精品一区二区| 午夜激情一区二区三区| 中文字幕亚洲一区二区va在线| 日韩视频123| 色88888久久久久久影院野外| 国产一区二区三区精品视频| 亚洲成人手机在线| 国产精品国产三级国产aⅴ无密码| 欧美一区二区三区免费在线看| 99riav一区二区三区| 麻豆91在线看| 亚洲第一在线综合网站| 亚洲欧美一区二区三区极速播放| 久久嫩草精品久久久精品一| 欧美一级xxx| 欧美日韩五月天| 一本色道久久加勒比精品| 国产ts人妖一区二区| 韩国精品久久久| 蜜桃视频第一区免费观看| 午夜亚洲福利老司机| 一个色综合av| 亚洲乱码日产精品bd| 中文字幕精品一区二区精品绿巨人| 日韩精品一区国产麻豆| 欧美高清你懂得| 欧美美女bb生活片| 欧美丝袜丝交足nylons图片| 91久久奴性调教| 日本高清不卡视频| 色就色 综合激情| 91在线视频播放地址| 99re这里只有精品视频首页| 成人免费视频播放| 北条麻妃国产九九精品视频| www.激情成人| 91色九色蝌蚪| 色综合久久中文综合久久97| 91一区一区三区| 在线免费观看日韩欧美| 在线观看欧美日本| 在线一区二区观看| 欧美日韩综合一区| 欧美视频在线不卡| 欧美裸体bbwbbwbbw| 欧美一区日韩一区| 久久尤物电影视频在线观看| 国产丝袜美腿一区二区三区| 中文字幕不卡一区| 一区二区在线电影| 天堂久久一区二区三区| 麻豆91在线播放免费| 国产九九视频一区二区三区| 成人精品一区二区三区中文字幕| 99这里只有精品| 在线中文字幕不卡| 欧美一级精品大片| 国产视频一区不卡| 夜夜嗨av一区二区三区中文字幕 | 色综合中文字幕国产| 成人黄色777网| 欧美午夜免费电影| 精品国产三级a在线观看| 欧美国产综合色视频| 一二三四社区欧美黄| 麻豆精品一区二区综合av| 粉嫩aⅴ一区二区三区四区| 色婷婷综合久久久中文一区二区| 欧美天堂亚洲电影院在线播放| 日韩视频一区二区三区| 日韩美女啊v在线免费观看| 亚洲一区二区三区在线| 国产一区二区精品久久99| 91久久香蕉国产日韩欧美9色| 日韩欧美一级在线播放| 中文字幕在线免费不卡| 视频一区二区三区中文字幕| 国产精品白丝av| 欧美日韩国产大片| 国产精品青草久久| 美女脱光内衣内裤视频久久影院| 成人午夜激情视频| 日韩欧美国产综合在线一区二区三区 | 日韩黄色免费电影| 成人精品国产福利| 精品精品国产高清a毛片牛牛| 日韩一区在线看| 国内精品伊人久久久久影院对白| 在线视频亚洲一区| 国产精品免费av| 久88久久88久久久| 欧美日韩国产一级| 成人免费一区二区三区视频 | 国产盗摄一区二区| 欧美日韩国产在线观看| 亚洲欧洲国产日本综合| 国产999精品久久久久久绿帽| 91精品国产日韩91久久久久久| 亚洲麻豆国产自偷在线| 国产高清一区日本| 精品国产污网站| 日本不卡视频在线| 欧美日本国产视频| 一区二区三区高清| 91蜜桃视频在线| 亚洲女与黑人做爰| 99久久精品免费| 《视频一区视频二区| 风流少妇一区二区| 国产欧美精品一区aⅴ影院 | 久久亚洲一区二区三区明星换脸| 午夜成人免费电影| 欧美精选在线播放| 亚洲成av人在线观看| 欧美在线综合视频| 亚洲小少妇裸体bbw| 欧美日韩视频不卡| 午夜久久久久久| 91精品国产91久久久久久最新毛片|