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; 
}