在Windows 7的視窗應程式中, 不論你用mouse或是touch作click的動作, 應用程式都會收到WM_LBUTTONDOWN 和 WM_LBUTTONUP 的事件. 如下面的Win32視窗程式所示,當收到滑鼠左鍵按下/放開的訊息時, 會跳出一個訊息視窗.
case WM_LBUTTONDOWN: { MessageBoxA(NULL, "Mouse left button down",0,0); }; break; case WM_LBUTTONUP: { MessageBoxA(NULL, "Mouse left button up",0,0); }; break;
[圖 1]滑鼠左鍵按下/放開
[圖 2]Touch下去/起來
從上面的圖示中看到, 不論你是用mouse或touch作click, 都會收到滑鼠左鍵按下/放開的事件; 但是開發觸控應用程式時, 可能需要分辨出使用者是利用滑鼠作點擊(click), 還是利用手指作觸碰, 來作不同的設定. 因此, 我們可以在收到WM_LBUTTONDOWN 和 WM_LBUTTONUP 時, 呼叫GetMessageExtraInfo()來判斷滑鼠事件是來自touch還是mouse, 程式碼如下所示:
1. 定義滑鼠事件來自touch的訊息, 如下所示:
#define MOUSEEVENTF_FORMTOUCH 0xFF515700
2. 利用GetMessageExtraInfo函式作判斷, 如下所示:
case WM_LBUTTONDOWN: { if((GetMessageExtraInfo() & MOUSEEVENTF_FORMTOUCH) == MOUSEEVENTF_FORMTOUCH) { MessageBoxA(NULL, "Click was generated by Touch",0,0); } else { MessageBoxA(NULL, "Click was generated by Mouse Click",0,0); } }; break; case WM_LBUTTONUP: { if((GetMessageExtraInfo() & MOUSEEVENTF_FORMTOUCH) == MOUSEEVENTF_FORMTOUCH) { MessageBoxA(NULL, "Click was generated by Touch",0,0); } else { MessageBoxA(NULL, "Click was generated by Mouse Click",0,0); } }; break;
結果如下面圖示:
[圖 3]滑鼠左鍵按下/放開
[圖 4] Touch下去/起來
沒有留言:
張貼留言