www.pudn.com > KeyTrac.rar > KeyTrac.cpp
//===================================================================== // HelloCE - A simple application for Windows CE // // Written for the book Programming Windows CE // Copyright (C) 1998 Douglas Boling // //===================================================================== # include// For all that Windows stuff # include // command bar includes # include "KeyTrac.h" // Program-specific stuff //--------------------------------------------------------------------- // Global data // const TCHAR szAppName[] = TEXT("KeyTrac"); HINSTANCE hInst; // Program instance handle //Program-specific global data KEY ka[16]; UINT wKeyMsg = 0; int nKeyCnt = 0, nFontHeight; TCHAR szMsgTxt[64]; // Message dispatch table for MainWindowProc const struct decodeUINT MainMessages[] = { WM_CREATE, DoCreateMain, WM_PAINT, DoPaintMain, WM_KEYUP,DoKeysMain, WM_KEYDOWN, DoKeysMain, WM_CHAR, DoKeysMain, WM_DEADCHAR, DoKeysMain, WM_SYSCHAR, DoKeysMain, WM_SYSDEADCHAR, DoKeysMain, WM_SYSKEYDOWN, DoKeysMain, WM_SYSKEYUP, DoKeysMain, // WM_HIBERNATE, DoHibernateMain, // WM_ACTIVATE, DoActivateMain, WM_DESTROY, DoDestroyMain, }; //===================================================================== // // Program entry point // int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { MSG msg; int rc = 0; HWND hwndMain; // Initialize application. rc = InitApp (hInstance); if (rc) return rc; // Initialize this instance. hwndMain = InitInstance (hInstance, lpCmdLine, nCmdShow); if (hwndMain == 0) return 0x10; // Application message loop while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } // Instance cleanup return TermInstance(hInstance, msg.wParam); } //--------------------------------------------------------------------- // InitApp - Application initialization // int InitApp (HINSTANCE hInstance) { WNDCLASS wc; // Register application main window class. 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 = NULL; // Default cursor wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wc.lpszMenuName = NULL; // Menu name wc.lpszClassName = szAppName; // Window class name if (RegisterClass (&wc) == 0) return 1; return 0; } //--------------------------------------------------------------------- // InitInstance - Instance initialization // HWND InitInstance (HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) { HWND hWnd; // Save program instance handle in global variable. hInst = hInstance; // Create main window. hWnd = CreateWindow (szAppName, // Window class TEXT("KeyTrac"), // Window title WS_VISIBLE, // Style flags CW_USEDEFAULT, // x position CW_USEDEFAULT, // y positoin CW_USEDEFAULT, // Initial width CW_USEDEFAULT, // Initial height NULL, // Parent NULL, // Menu, must be null hInstance, // Application instance NULL); // Pointer to create parameters // Return fail code if window not created. if (! IsWindow(hWnd)) return 0; // Standard show and update calls ShowWindow (hWnd, nCmdShow); UpdateWindow (hWnd); return hWnd; } //--------------------------------------------------------------------- // TermInstance - Program cleanup // int TermInstance (HINSTANCE hInstance, int nDefRC) { return nDefRC; } //===================================================================== // Message handling procedures for main window // //--------------------------------------------------------------------- // MainWndProc - Callback function for application window // LRESULT CALLBACK MainWndProc (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) { int i; // // Search message list to see if we need to handle this messge. // If in list, call procedure. // for (i = 0; i = 16) return 0; switch(wMsg){ case WM_KEYUP: lstrcpy(ka[nKeyCnt].szMsgTxt, TEXT("WM_KEYUP")); break; case WM_KEYDOWN: lstrcpy(ka[nKeyCnt].szMsgTxt, TEXT("WM_KEYDOWN")); break; case WM_CHAR: lstrcpy(ka[nKeyCnt].szMsgTxt, TEXT("WM_CHAR")); break; case WM_DEADCHAR: lstrcpy(ka[nKeyCnt].szMsgTxt, TEXT("WM_SYSCHAR")); break; case WM_SYSDEADCHAR: lstrcpy(ka[nKeyCnt].szMsgTxt, TEXT("WM_SYSDEADCHAR")); break; case WM_SYSKEYDOWN: lstrcpy(ka[nKeyCnt].szMsgTxt, TEXT("WM_SYSKEYDOWN")); break; case WM_SYSKEYUP: lstrcpy(ka[nKeyCnt].szMsgTxt, TEXT("WM_SYSKEYUP")); break; default: lstrcpy(ka[nKeyCnt].szMsgTxt, TEXT("unkown")); break; } ka[nKeyCnt].wKeyMsg = wMsg; ka[nKeyCnt].wParam = wParam; ka[nKeyCnt].lParam = lParam; //Capture the state of the shift flags ka[nKeyCnt].wFlags = 0; if(GetKeyState(VK_LMENU)) ka[nKeyCnt].wFlags |= FLAG_LMENU; if(GetKeyState(VK_RMENU)) ka[nKeyCnt].wFlags |= FLAG_RMENU; if(GetKeyState(VK_LCONTROL)) ka[nKeyCnt].wFlags |= FLAG_LCONTROL; if(GetKeyState(VK_RCONTROL)) ka[nKeyCnt].wFlags |= FLAG_RCONTROL; if(GetKeyState(VK_LSHIFT)) ka[nKeyCnt].wFlags |= FLAG_LSHIFT; if(GetKeyState(VK_RSHIFT)) ka[nKeyCnt].wFlags |= FLAG_RSHIFT; nKeyCnt ++; InvalidateRect(hWnd,NULL,FALSE); return 0; } //---------------------------------------------------------------------- // DoHibernateMain - Process WM_HIBERNATE message for window. // LRESULT DoHibernateMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) { // If not the active window, nuke the command bar to save memory. if (GetActiveWindow() != hWnd) CommandBar_Destroy (GetDlgItem(hWnd, IDC_CMDBAR)); return 0; } //---------------------------------------------------------------------- // DoActivateMain - Process WM_ACTIVATE message for window. // LRESULT DoActivateMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) { HWND hwndCB; // If activating and no command bar, create it. if ((LOWORD(wParam) != WA_INACTIVE) && (GetDlgItem (hWnd, IDC_CMDBAR) == 0)) { // Create a command bar. hwndCB = CommandBar_Create (hInst, hWnd, IDC_CMDBAR); // Add exit button to command bar. CommandBar_AddAdornments (hwndCB, 0, 0); } return 0; } //---------------------------------------------------------------------- // DoDestroyMain - Process WM_DESTROY message for window. // LRESULT DoDestroyMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) { PostQuitMessage(0); return 0; }