Adding rostests as part of the tree restructure
[reactos.git] / rosapps / tests / accelerator / accelerator.c
1 #include <windows.h>
2 #include <stdio.h>
3 #include <string.h>
4
5 #define ID_ACCEL1 0x100
6 #define ID_ACCEL2 0x101
7 #define ID_ACCEL3 0x102
8 #define ID_ACCEL4 0x103
9
10 #ifndef VK_A
11 #define VK_A 0x41
12 #endif
13
14 /*
15 * {fVirt, key, cmd}
16 * fVirt |= FVIRTKEY | FCONTROL | FALT | FSHIFT
17 */
18 //static HFONT tf;
19 static ACCEL Accelerators[4] = {
20 { FVIRTKEY, VK_A, ID_ACCEL1},
21 { FVIRTKEY | FSHIFT, VK_A, ID_ACCEL2},
22 { FVIRTKEY | FCONTROL, VK_A, ID_ACCEL3},
23 { FVIRTKEY | FALT, VK_A, ID_ACCEL4}};
24 static HACCEL hAcceleratorTable;
25 static char Event[200];
26
27 LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM);
28
29 int WINAPI
30 WinMain(HINSTANCE hInstance,
31 HINSTANCE hPrevInstance,
32 LPSTR lpszCmdLine,
33 int nCmdShow)
34 {
35 WNDCLASS wc;
36 MSG msg;
37 HWND hWnd;
38
39 wc.lpszClassName = "AcceleratorTest";
40 wc.lpfnWndProc = MainWndProc;
41 wc.style = CS_VREDRAW | CS_HREDRAW;
42 wc.hInstance = hInstance;
43 wc.hIcon = LoadIcon(NULL, (LPCTSTR)IDI_APPLICATION);
44 wc.hCursor = LoadCursor(NULL, (LPCTSTR)IDC_ARROW);
45 wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
46 wc.lpszMenuName = NULL;
47 wc.cbClsExtra = 0;
48 wc.cbWndExtra = 0;
49 if (RegisterClass(&wc) == 0)
50 {
51 fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n",
52 GetLastError());
53 return(1);
54 }
55
56 hWnd = CreateWindow("AcceleratorTest",
57 "Accelerator Test",
58 WS_OVERLAPPEDWINDOW,
59 0,
60 0,
61 CW_USEDEFAULT,
62 CW_USEDEFAULT,
63 NULL,
64 NULL,
65 hInstance,
66 NULL);
67 if (hWnd == NULL)
68 {
69 fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n",
70 GetLastError());
71 return(1);
72 }
73
74 /*tf = CreateFontA(14, 0, 0, TA_BASELINE, FW_NORMAL, FALSE, FALSE, FALSE,
75 ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
76 DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "Timmons");*/
77
78 Event[0] = 0;
79
80 ShowWindow(hWnd, nCmdShow);
81
82 hAcceleratorTable = CreateAcceleratorTable(Accelerators,
83 sizeof(Accelerators)/sizeof(Accelerators[1]));
84 if (hAcceleratorTable == NULL)
85 {
86 fprintf(stderr, "CreateAcceleratorTable failed (last error 0x%lX)\n",
87 GetLastError());
88 return(1);
89 }
90
91 while(GetMessage(&msg, NULL, 0, 0))
92 {
93 if (!TranslateAccelerator(hWnd, hAcceleratorTable, &msg))
94 {
95 TranslateMessage(&msg);
96 DispatchMessage(&msg);
97 }
98 }
99
100 if (!DestroyAcceleratorTable(hAcceleratorTable))
101 {
102 fprintf(stderr, "DestroyAcceleratorTable failed (last error 0x%lX)\n",
103 GetLastError());
104 return(1);
105 }
106
107 //DeleteObject(tf);
108
109 return msg.wParam;
110 }
111
112 LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
113 {
114 PAINTSTRUCT ps;
115 HDC hDC;
116 char buf[200];
117
118 switch(msg)
119 {
120 case WM_PAINT:
121 hDC = BeginPaint(hWnd, &ps);
122 //SelectObject(hDC, tf);
123 sprintf(buf, "Event: '%s'", Event);
124 TextOut(hDC, 10, 10, buf, strlen(buf));
125 EndPaint(hWnd, &ps);
126 break;
127
128 case WM_DESTROY:
129 PostQuitMessage(0);
130 break;
131
132 case WM_COMMAND:
133
134 switch (LOWORD(wParam))
135 {
136 case ID_ACCEL1:
137 strcpy(Event, "A");
138 break;
139
140 case ID_ACCEL2:
141 strcpy(Event, "SHIFT+A");
142 break;
143
144 case ID_ACCEL3:
145 strcpy(Event, "CTRL+A");
146 break;
147
148 case ID_ACCEL4:
149 strcpy(Event, "ALT+A");
150 break;
151
152 default:
153 sprintf(Event, "%d", LOWORD(wParam));
154 break;
155 }
156
157 InvalidateRect(hWnd, NULL, TRUE);
158 UpdateWindow(hWnd);
159 break;
160
161 default:
162 return DefWindowProc(hWnd, msg, wParam, lParam);
163 }
164 return 0;
165 }