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

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

?? tchstub.cpp

?? The touch screen driver reads input from touch screen hardware and converts it to touch events that
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
    if ((0 != (Flags&TouchSamplePreviousDownFlag)) && 
        (0 == (Flags&TouchSampleDownFlag))            )    // for the first sample with the pen up
    {

        // check for errors, stop and report them if so.  Ignore short strokes as the measurement is likely to be inaccurate
        //@todo - should this be every stroke, or average out for 5 strokes, or maybe every 5th stroke?
        if (nTicksNow - nStrokeStartTick > SMALL_STROKE_THRESHOLD)
        {
            // calculate statistics
            if (nTicksNow != nStrokeStartTick)
                samplesPerSecond = (sampleCount*1000)/(nTicksNow - nStrokeStartTick);
            if (nLongIntervalCount)
                nLongIntervalAvg = nLongIntervalSum/nLongIntervalCount;
            else
                nLongIntervalAvg = 0;
            if (nPointSkips)
            {
                nPointSkipAvg = nPointSkipSum/nPointSkips;
            }
            else
                nPointSkipAvg = 0;

            if (nLongIntervalCount > 0 || nPointSkips > 0 || samplesPerSecond < POINT_RATE_THRESHOLD)
            {
                if( !_bNoDbgMsg )
                {
                    static HANDLE hThread = NULL;
                    DWORD dwExitCode = 0;

                    // Check the Exit code of the Error message thread to see if there is a thread already running.
                    // If the thread is still active, skip this message. (This will be always logged to the file.)
                    if( hThread )
                        GetExitCodeThread(hThread, &dwExitCode);

                    if( NULL == hThread || STILL_ACTIVE != dwExitCode)
                    {
                        EnterCriticalSection(&csErrMsg);
                        // Fill the global error message buffer.
                        wsprintf(_szErrorMsg, 
                            TEXT("TRANSCRIBER MAY NOT WORK WELL GIVEN THE CURRENT POINT RATE AND LATENCY! ")
                            TEXT("INKSAMP2 at osfiles\\PUBLIC\\COMMON\\OAK\\DEMOS can help debug this.\n")
                            TEXT("Samples per second: %d (100 min) \n Long intervals: %d (0 Max) \n Avg. long interval duration %d\n Total long interval duration %d\n Ink skips %d (0 max)\n Avg Ink Skip squared %d."), 
                            samplesPerSecond, nLongIntervalCount, nLongIntervalAvg, nLongIntervalSum, nPointSkips, nPointSkipAvg);
                        LeaveCriticalSection(&csErrMsg);

                        // Create a new thread to display the error message, to make sure that we are not blocking the
                        // touch driver thread so that touch driver will be active even with the message box.
                        hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TchMessageBoxThread, NULL, 0, NULL);
                        if( NULL == hThread )
                        {
                            MYERRORMSG(1, (__TEXT("Couldn't create touchstub window thread.\r\n")));
                        }
                        // Since we have shown this msg once, turn off the message box.
                        _bNoDbgMsg = TRUE;
                    }
                }

                // Log the error to a log file also.
                HANDLE hFile;

                // Open/Create the log file.
                hFile = CreateFile(TEXT("\\tchDbg.log"), GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
                if(hFile!=INVALID_HANDLE_VALUE)
                {
                    DWORD dw = 0;
                    int   len;
                    int   i;
                    TCHAR szBuffer[2*MAX_PATH];
                    unsigned char strLogMsg[2*MAX_PATH];

                    // Check if the log file already exist and we just opened it.
                    if( 0 == GetLastError() )
                    {
                        // This file did not exist before, so write the header information for the log.
                        SetFilePointer(hFile, 0, NULL, FILE_END);

                        wsprintf(szBuffer, L"TRANSCRIBER MAY NOT WORK WELL GIVEN THE CURRENT POINT RATE AND LATENCY! \n"
                            L"INKSAMP2 at osfiles\\PUBLIC\\COMMON\\OAK\\DEMOS can help debug this.\n"
                            L"Log contains the following values:\n"
                            L"Samples per second: (100 min), Long intervals: (0 Max), Avg. long interval duration, Total long interval duration, Ink skips (0 max), Avg Ink Skip squared.\n" ); 

                        len = _tcslen(szBuffer); 
                        for (i = 0; i < len; i ++) 
                            strLogMsg[i] = (unsigned char)szBuffer[i]; 
                        strLogMsg[len] = 0;

                        WriteFile(hFile, strLogMsg, len, &dw, NULL);
                    }

                    // Make sure we are at the end of the file.
                    SetFilePointer(hFile, 0, NULL, FILE_END);

                    // Fill the buffer
                    wsprintf(szBuffer, L"%d , %d , %d , %d , %d , %d \n", 
                        samplesPerSecond, nLongIntervalCount, nLongIntervalAvg, nLongIntervalSum, nPointSkips, nPointSkipAvg);

                    // Copy the Wide char string to uchar string.
                    len = _tcslen(szBuffer); 
                    for (i = 0; i < len; i ++) 
                        strLogMsg[i] = (unsigned char)szBuffer[i]; 
                    strLogMsg[len] = 0;

                    // Write the string to the log file.
                    WriteFile(hFile, strLogMsg, len, &dw, NULL);

                    CloseHandle(hFile);
                }
            }
        }
    }


#endif


   if (NULL == *_phStubWnd)
	IsStubWndExist();

   dwTick = GetTickCount();
   // Check if we need to send this point to system or transcriber.
   // If we are are in Out Of Memory state (Indicated by Tch thread in high priority), which prevents us from 
   // communicating with transcriber, we need to send the points to system instead of transcriber.
   if( _hClientWnd==NULL || 
	   _bTchThreadHighPriority || 
      *_phStubWnd==NULL ||
      (Flags&TouchSampleValidFlag)==0 ||
      (Flags&TouchSampleIgnore)!=0)
     {
#ifdef DEBUG1
	   	 wsprintf(str, TEXT(" *** CgrCallback -  sending point to  (%x) *** \n"), v_pfnCgrPointCallback);
		 OutputDebugString( str);
#endif
         (*v_pfnCgrPointCallback)(Flags, X, Y);
         return 0;           
     }
// PostMessage(*_phStubWnd, WM_STUB_TABLET, dwTick,((Flags<<26)|((X&0x01FFF)<<13)|(Y&0x01FFF)));
//   StubCallback2(dwTick, Flags, X, Y);
#ifdef DEBUG1
   wsprintf(str, TEXT(" *** CgrCallback - Transcriber is eating point (%d,%d) to hwnd %x*** \n"), X, Y, _hClientWnd);
		OutputDebugString( str);
#endif

     SendPtToSelf(Flags, X, Y);
	 return 0;
}


/* *********************************************************************************** */
// This takes points off the internal Touch Driver queue (Q2) and decides where to send them 
//  - either to Transcriber, or back to the system
void StubCallback2(
   DWORD dwTick0,
	TOUCH_PANEL_SAMPLE_FLAGS	Flags,
	INT	X,
	INT	Y
    )
{
 DWORD dwTick = dwTick0;
 TOUCH_PANEL_SAMPLE_FLAGS FlagsToDll = Flags, FlagsToWnd = Flags;

#if WRITE_STATISTICSINNER	// turn on to see points we place into the queue for the app
   {
    static int   _iStat1Writes = 0;
    static int   _iStat1Current = 0;
    static short _iStat1Buf[MAX_STATS][3] = {0};
    static int   count = 0;


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

 
		  
		  _iStat1Current = 0;

             hFile = CreateFile(L"\\tchlogInner.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)_iStat1Buf[i][1], (int)(3000 - _iStat1Buf[i][2]), (int)_iStat1Buf[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);
                }

         }
   }
#endif


   // if we don't have a callig client window or bad sample or we are ignoring it,
   // or we are in Out Of Memory state (Indicated by Tch thread in high priority), which prevents us from 
   // communicating with transcriber, pass back to the system (so the app "underneath" transcriber will get them)
   if(_hClientWnd==NULL ||
       _bTchThreadHighPriority ||
      (Flags&TouchSampleValidFlag)==0 ||
      (Flags&TouchSampleIgnore)!=0)
     {
         (*v_pfnCgrPointCallback)(Flags, X, Y);
#ifdef DEBUG2
         OutputDebugString(L"CgrTouch Point 1\n");
#endif
         return;
     }

//	Intercept points here
   //1. test window at stroke begining 
   // 0x07 means pen down, valid, callib, but pen wasn't down for the previous pt
   if(Flags==0x07)
      {
         if(!IsWindow(_hClientWnd))
            {
               _hClientWnd = NULL;
               (*v_pfnCgrPointCallback)(Flags, X, Y);
#ifdef DEBUG2
         OutputDebugString(L"CgrTouch Point 2\n");
#endif
               return;
            }

        // set flags 
        _iClientFlags = (int)GetWindowLong(_hClientWnd, 0);
        //just adjust

        if((_iClientFlags&TABLET_TEST_FIRST_POINT)!=0 &&
           !SendMessage(_hClientWnd, WM_PEGREC_FIRSTPOINT, 0, MAKELPARAM(X, Y)))
           {
              _iClientFlags = TABLET_ALL_TO_SYSTEM;
           }

        if((_iClientFlags&TABLET_SMART_TO_SYSTEM)!=0)
           _iClientFlags = _iClientFlags&(~TABLET_ALL_TO_SYSTEM);
           

        if((_iClientFlags&TABLET_SAVE_FOCUS_WND)!=0)
           {

                  //@todo - do we need FindForegroundFocusWindow( ) instead of GetForegroundWindow( )?
                  _hLastTouchFocusWnd = GetForegroundWindow();  
           }
        begTick = dwLastDelayTick = dwTick;
        _begX = iLastDelayX = X;
        _begY = iLastDelayY = Y;
        bClick = FALSE;
        bDelay = FALSE;
        bNear = TRUE;
      } // if(flgs==07)


   if((_iClientFlags&TABLET_SMART_TO_SYSTEM)!=0)
      {   
         //2. Is still near?
         if( bNear                          && 
             Flags==0x0f /*inter point*/   &&
            (Flags&TouchSampleDownFlag)!=0 &&
            (_begX-X>=iMaxClickDist || _begX-X<=-iMaxClickDist ||
             _begY-Y>=iMaxClickDist || _begY-Y<=-iMaxClickDist))
            {  // decision = no click and no initial delay => stop NEAR
               bNear = FALSE;
               if((_iClientFlags&TABLET_SEND_RELEASE_MSG)!=0)
                    SendPtToWnd((TouchSamplePreviousDownFlag|TouchSampleDownFlag|TouchSampleIgnore), X, Y);
                                   iLastDelayX = X;
                                   iLastDelayY = Y;
                                   dwLastDelayTick = dwTick;
					{
                       HANDLE  hThread=GetCurrentThread();
                       SetThreadPriority(hThread, THREAD_PRIORITY_HIGHEST);
					}
            }

         // IS CLICK?
         if( bNear                                     &&
             Flags==0x0d      /*LAST PT*/              &&
             (_iClientFlags&TABLET_CLICK_TO_SYSTEM)!=0 &&
             dwTick-begTick < dwMaxClickTime           &&
             begTick-_dwLastSendedTick > dwMinPauseBeforeClick) 
            {  //yes - it's click
              HWND hWndFgr = GetForegroundWindow();
              BOOL bPermition = TRUE;
               bClick = TRUE;
               _dwLastSendedTick = 0;
               if((_iClientFlags&(TABLET_SEND|TABLET_NEED_PERMITION))!=0)
                  bPermition = (BOOL)SendMessage(_hClientWnd, WM_PEGREC_MOUSECLICK, (WPARAM)hWndFgr, MAKELPARAM(_begX, _begY));
               else
                  PostMessage(_hClientWnd, WM_PEGREC_MOUSECLICK, (WPARAM)hWndFgr, MAKELPARAM(_begX, _begY));

			   // simulate a click to the app "below" Transcriber (since we already ate the points)
               if((_iClientFlags&TABLET_NEED_PERMITION)==0 || bPermition)
                  {
                     (*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);
                  }
               else
			      {
#ifdef DEBUG2
         OutputDebugString(L"CgrTouch Point 3\n");
#endif
                  return;
				  }
            }

		 // we delay points to see if we should either treat this as a selection or see if 
		 //  we should send the point to the application "underneath" Transcriber,
		 //  or tap and hold.

         // IS INITIAL DELAY?
         if( bNear                                      &&
             Flags==0x0f   /*intermediate point*/       &&
             (_iClientFlags&TABLET_STARTDELAY_TO_SYSTEM)!=0  &&
             (dwTick-begTick>1200 ||
               (dwTick-begTick>dwMinStartDelayTime      &&

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av不卡免费在线观看| 国产亚洲欧美激情| 精品久久国产字幕高潮| 国产精品久久久久四虎| 男女性色大片免费观看一区二区 | 国产精品久久久久久亚洲伦| 亚洲午夜电影网| 成人av网站免费| 欧美哺乳videos| 无吗不卡中文字幕| 色哟哟日韩精品| 中文字幕永久在线不卡| 国产一区欧美日韩| 91精品国产91久久综合桃花| 中文字幕一区二区日韩精品绯色| 美女一区二区在线观看| 精品视频一区二区不卡| 亚洲青青青在线视频| 国产91精品一区二区麻豆亚洲| 欧美一区日本一区韩国一区| 玉米视频成人免费看| 成人91在线观看| 中文字幕免费不卡| 国产99精品国产| 久久久五月婷婷| 青青草97国产精品免费观看 | 热久久一区二区| 欧美亚洲国产怡红院影院| 中文字幕一区二区三区在线观看| 国内成人精品2018免费看| 日韩免费性生活视频播放| 午夜婷婷国产麻豆精品| 欧美午夜一区二区三区| 亚洲中国最大av网站| 欧美在线免费视屏| 亚洲成人黄色影院| 91麻豆精品国产91久久久| 天天综合色天天| 欧美一区二区三区视频免费| 日产国产欧美视频一区精品| 91精品久久久久久久99蜜桃| 日欧美一区二区| 日韩欧美国产不卡| 国产精品夜夜嗨| 国产精品素人视频| 色呦呦一区二区三区| 亚洲午夜久久久久久久久电影院| 91福利国产精品| 日韩电影一区二区三区| 日韩欧美国产三级电影视频| 激情综合色播五月| 中文字幕欧美激情| 欧美亚洲一区二区在线观看| 丝袜亚洲另类丝袜在线| xnxx国产精品| 91亚洲永久精品| 亚洲五月六月丁香激情| 精品国产青草久久久久福利| 国产不卡在线播放| 一区二区久久久| 日韩亚洲欧美成人一区| 国产jizzjizz一区二区| 亚洲精品videosex极品| 欧美精品丝袜中出| 国产成人夜色高潮福利影视| 亚洲丝袜另类动漫二区| 91精品国产色综合久久不卡电影| 激情图片小说一区| 亚洲精品日日夜夜| 精品国产凹凸成av人网站| 成人午夜电影久久影院| 亚洲国产综合91精品麻豆 | 在线观看视频欧美| 看电视剧不卡顿的网站| 国产精品污网站| 欧美精品1区2区| 成人动漫精品一区二区| 日韩av高清在线观看| 综合激情网...| 26uuu亚洲| 欧美丰满嫩嫩电影| 白白色亚洲国产精品| 久久国产欧美日韩精品| 亚洲激情在线激情| 国产亚洲综合av| 91精品国产欧美一区二区18| 99精品欧美一区二区蜜桃免费 | 亚洲三级在线看| 欧美成人免费网站| 日本精品视频一区二区三区| 国产激情精品久久久第一区二区 | 972aa.com艺术欧美| 日本中文字幕一区二区有限公司| 亚洲欧洲精品一区二区三区 | 日韩国产欧美在线视频| 亚洲啪啪综合av一区二区三区| 日韩欧美高清在线| 欧美日韩一区二区三区在线| 成人动漫av在线| 国产69精品久久久久777| 日本中文字幕一区二区视频| 一区二区三区欧美在线观看| 国产精品欧美一级免费| 日韩欧美在线综合网| 欧美精品视频www在线观看| 色8久久精品久久久久久蜜| av网站免费线看精品| 高清久久久久久| 国产成人精品三级麻豆| 国产一区二区精品久久99| 六月婷婷色综合| 日本va欧美va精品| 日韩电影在线免费看| 天天影视涩香欲综合网 | 国产精品视频你懂的| 久久久久久久久99精品| 久久久精品蜜桃| 久久精品综合网| 欧美经典一区二区三区| 国产欧美一二三区| 国产精品午夜电影| 亚洲欧美中日韩| 一区二区在线看| 亚洲图片自拍偷拍| 日韩成人精品在线| 久久国产精品一区二区| 激情图片小说一区| 高清日韩电视剧大全免费| kk眼镜猥琐国模调教系列一区二区| 成人综合激情网| 一本一道久久a久久精品| 在线观看亚洲一区| 欧美一区二区观看视频| 欧美不卡激情三级在线观看| 精品对白一区国产伦| 欧美国产禁国产网站cc| 亚洲欧洲成人自拍| 亚洲国产人成综合网站| 欧美a级一区二区| 懂色av中文字幕一区二区三区| 国产v综合v亚洲欧| 在线免费不卡视频| 7777精品伊人久久久大香线蕉最新版 | 91蝌蚪porny| 91麻豆精品国产91久久久使用方法| 日韩三级精品电影久久久| 国产欧美日韩视频在线观看| 亚洲欧美自拍偷拍| 日本特黄久久久高潮| 国产激情精品久久久第一区二区 | 国产精品不卡一区| 午夜激情久久久| 国产麻豆视频一区| 色av成人天堂桃色av| 日韩欧美电影一区| 中文字幕一区二区三| 琪琪久久久久日韩精品| 不卡高清视频专区| 日韩一区二区三区免费观看| 国产精品二三区| 久久精品国产精品青草| 色综合久久综合中文综合网| 日韩欧美卡一卡二| 伊人色综合久久天天人手人婷| 国内精品写真在线观看| 欧美在线影院一区二区| 国产亚洲精品精华液| 日韩国产一区二| 一本一道综合狠狠老| 国产欧美日韩精品a在线观看| 亚洲mv在线观看| 色综合久久综合网97色综合| 精品国产污污免费网站入口| 亚洲成人激情自拍| 91片黄在线观看| 欧美国产日韩亚洲一区| 蜜桃视频第一区免费观看| 欧美天天综合网| 亚洲男人天堂av网| 丁香亚洲综合激情啪啪综合| 在线电影欧美成精品| 亚洲另类在线一区| 波多野结衣一区二区三区| 欧美一级二级三级乱码| 亚洲在线观看免费视频| fc2成人免费人成在线观看播放| 精品欧美一区二区久久| 日韩avvvv在线播放| 欧美日韩国产成人在线免费| 亚洲精品欧美综合四区| 91影视在线播放| 国产精品传媒入口麻豆| 成人h版在线观看| 欧美国产精品中文字幕| 国产不卡视频一区二区三区| 国产亚洲综合在线| 福利视频网站一区二区三区| 国产欧美一区在线| 成人黄色av电影| 国产精品高潮久久久久无|