-- 作者:wangxinxin
-- 发布时间:2010-11-26 9:10:54
-- WinCE应用开发——触摸屏输入
一,信息
触摸屏信息同鼠标信息,不过只有WM_LBUTTONDOWN,WM_LBUTTONUP, WM_MOUSEMOVE 三种。
二,捕捉函数
BOOL GetMouseMovePoints (PPOINT pptBuf, UINT nBufPoints,
UINT *pnPointsRetrieved);
三,实例 PenTrac.h #define dim(x) (sizeof(x) / sizeof(x[0])) struct decodeUINT { // Structure associates UINT Code; // messages // with a function. LRESULT (*Fxn)(HWND, UINT, WPARAM, LPARAM); }; struct decodeCMD { // Structure associates UINT Code; // menu IDs with a LRESULT (*Fxn)(HWND, WORD, HWND, WORD); // function. }; HWND InitInstance (HINSTANCE, LPWSTR, int); int TermInstance (HINSTANCE, int); LRESULT CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM); LRESULT DoPaintMain (HWND, UINT, WPARAM, LPARAM); LRESULT DoMouseMain (HWND, UINT, WPARAM, LPARAM); LRESULT DoDestroyMain (HWND, UINT, WPARAM, LPARAM); PenTrac.cpp #include <windows.h> // For all that Windows stuff #include "pentrac.h" // Program-specific stuff const TCHAR szAppName[] = TEXT ("PenTrac"); HINSTANCE hInst; // Program instance handle const struct decodeUINT MainMessages[] = { WM_LBUTTONDOWN, DoMouseMain, WM_MOUSEMOVE, DoMouseMain, WM_DESTROY, DoDestroyMain, }; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { MSG msg; int rc = 0; HWND hwndMain; hwndMain = InitInstance (hInstance, lpCmdLine, nCmdShow); if (hwndMain == 0) return 0x10; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return TermInstance (hInstance, msg.wParam); } HWND InitInstance (HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) { WNDCLASS wc; HWND hWnd; #if defined(WIN32_PLATFORM_PSPC) hWnd = FindWindow (szAppName, NULL); if (hWnd) { SetForegroundWindow ((HWND)(((DWORD)hWnd) | 0x01)); return 0; } #endif hInst = hInstance; wc.style = 0; // Window style wc.lpfnWndProc = MainWndProc; // Callback function wc.cbClsExtra = 0; // Extra class data wc.cbWndExtra = 0; // Extra window data wc.hInstance = hInstance; // Owner handle wc.hIcon = NULL, // Application icon wc.hCursor = LoadCursor (NULL, IDC_ARROW);// Default cursor wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wc.lpszMenuName = NULL; // Menu name wc.lpszClassName = szAppName; // Window class name if (RegisterClass (&wc) == 0) return 0; hWnd = CreateWindowEx (WS_EX_NODRAG, szAppName, TEXT ("PenTrac"), WS_VISIBLE | WS_CAPTION | WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if (!IsWindow (hWnd)) return 0; ShowWindow (hWnd, nCmdShow); UpdateWindow (hWnd); return hWnd; } int TermInstance (HINSTANCE hInstance, int nDefRC) { return nDefRC; } LRESULT CALLBACK MainWndProc (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) { INT i; for (i = 0; i < dim(MainMessages); i++) { if (wMsg == MainMessages[i].Code) return (*MainMessages[i].Fxn)(hWnd, wMsg, wParam, lParam); } return DefWindowProc (hWnd, wMsg, wParam, lParam); } LRESULT DoMouseMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) { POINT pt[64]; POINT ptM; UINT i, uPoints = 0; HDC hdc; ptM.x = LOWORD (lParam); ptM.y = HIWORD (lParam); hdc = GetDC (hWnd); if (wMsg == WM_MOUSEMOVE) { if (wParam & MK_SHIFT) GetMouseMovePoints (pt, 64, &uPoints); for (i = 0; i < uPoints; i++) { pt[i].x /= 4; // Convert move pts to screen coords pt[i].y /= 4; MapWindowPoints (HWND_DESKTOP, hWnd, &pt[i], 1); SetPixel (hdc, pt[i].x, pt[i].y, RGB (255, 0, 0)); SetPixel (hdc, pt[i].x+1, pt[i].y, RGB (255, 0, 0)); SetPixel (hdc, pt[i].x, pt[i].y+1, RGB (255, 0, 0)); SetPixel (hdc, pt[i].x+1, pt[i].y+1, RGB (255, 0, 0)); } } SetPixel (hdc, ptM.x, ptM.y, RGB (0, 0, 0)); SetPixel (hdc, ptM.x+1, ptM.y, RGB (0, 0, 0)); SetPixel (hdc, ptM.x, ptM.y+1, RGB (0, 0, 0)); SetPixel (hdc, ptM.x+1, ptM.y+1, RGB (0, 0, 0)); ReleaseDC (hWnd, hdc); Sleep(25); return 0; } LRESULT DoDestroyMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) { PostQuitMessage (0); return 0; }
|