Adding rostests as part of the tree restructure
[reactos.git] / rosapps / tests / linetest / linetest.c
1
2 #include <windows.h>
3 #include <stdio.h>
4
5 #include <tchar.h>
6
7 LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM);
8
9 const TCHAR* CLASS_NAME = _T("LineTestClass");
10
11 int WINAPI
12 WinMain(HINSTANCE hInstance,
13 HINSTANCE hPrevInstance,
14 LPSTR lpszCmdLine,
15 int nCmdShow)
16 {
17 WNDCLASS wc;
18 MSG msg;
19 HWND hWnd;
20
21 wc.lpszClassName = CLASS_NAME;
22 wc.lpfnWndProc = MainWndProc;
23 wc.style = CS_VREDRAW | CS_HREDRAW;
24 wc.hInstance = hInstance;
25 wc.hIcon = LoadIcon(NULL, (LPCSTR)IDI_APPLICATION);
26 wc.hCursor = LoadCursor(NULL, (LPCSTR)IDC_ARROW);
27 wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
28 wc.lpszMenuName = NULL;
29 wc.cbClsExtra = 0;
30 wc.cbWndExtra = 0;
31 if (RegisterClass(&wc) == 0)
32 {
33 fprintf(stderr, "RegisterClass failed (last error 0x%lX)\n",
34 GetLastError());
35 return(1);
36 }
37
38 hWnd = CreateWindow(CLASS_NAME,
39 _T("Line drawing test"),
40 WS_OVERLAPPEDWINDOW,
41 0,
42 0,
43 CW_USEDEFAULT,
44 CW_USEDEFAULT,
45 NULL,
46 NULL,
47 hInstance,
48 NULL);
49 if (hWnd == NULL)
50 {
51 fprintf(stderr, "CreateWindow failed (last error 0x%lX)\n",
52 GetLastError());
53 return(1);
54 }
55
56 ShowWindow(hWnd, nCmdShow);
57
58 while(GetMessage(&msg, NULL, 0, 0))
59 {
60 TranslateMessage(&msg);
61 DispatchMessage(&msg);
62 }
63
64 return msg.wParam;
65 }
66
67 #define red RGB(255,0,0)
68 #define grn RGB(0,255,0)
69 #define blu RGB(0,0,255)
70 #define blk RGB(0,0,0)
71
72 static void
73 DrawLines(HDC hDC)
74 {
75 static struct
76 {
77 int fromx;
78 int fromy;
79 int tox;
80 int toy;
81 COLORREF clr;
82 }
83 points[ ] =
84 {
85 { 10, 10, 19, 10, red },
86 { 20, 10, 20, 19, grn },
87 { 20, 20, 11, 20, blu },
88 { 10, 20, 10, 11, blk },
89 { 12, 12, 15, 15, red },
90 { 18, 12, 15, 15, grn },
91 { 18, 18, 15, 15, blu },
92 { 12, 18, 15, 15, blk },
93
94 { 35, 10, 39, 14, red },
95 { 40, 15, 36, 19, grn },
96 { 35, 20, 31, 16, blu },
97 { 30, 15, 34, 11, blk },
98
99 { 2, 1, 5, 2, red },
100 { 6, 2, 5, 5, grn },
101 { 5, 6, 2, 5, blu },
102 { 1, 5, 2, 2, blk },
103
104 { 50, 1, 51, 1, red },
105 { 50, 2, 52, 2, grn },
106 { 50, 3, 53, 3, blu },
107 { 50, 4, 54, 4, blk },
108 { 50, 5, 55, 5, red },
109 { 50, 6, 56, 6, grn },
110 { 50, 7, 57, 7, blu },
111 { 50, 8, 58, 8, blk },
112 { 50, 9, 59, 9, red },
113 { 50, 10, 60, 10, grn },
114 { 50, 11, 61, 11, blu },
115 { 50, 12, 62, 12, blk },
116
117 { 50, 14, 62, 14, red },
118 { 51, 15, 62, 15, grn },
119 { 52, 16, 62, 16, blu },
120 { 53, 17, 62, 17, blk },
121 { 54, 18, 62, 18, red },
122 { 55, 19, 62, 19, grn },
123 { 56, 20, 62, 20, blu },
124 { 57, 21, 62, 21, blk },
125 { 58, 22, 62, 22, red },
126 { 59, 23, 62, 23, grn },
127 { 60, 24, 62, 24, blu },
128 { 61, 25, 62, 25, blk },
129 };
130 int i;
131
132 for (i = 0; i < sizeof(points) / sizeof(points[0]); i++)
133 {
134 HPEN hpen, hpenold;
135 hpen = CreatePen ( PS_SOLID, 0, points[i].clr );
136 hpenold = (HPEN)SelectObject ( hDC, hpen );
137 MoveToEx ( hDC, points[i].fromx, points[i].fromy, NULL );
138 LineTo ( hDC, points[i].tox, points[i].toy );
139 SelectObject ( hDC, hpenold );
140 DeleteObject ( hpen );
141 }
142 }
143
144 LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
145 {
146 PAINTSTRUCT ps;
147 HDC hDC;
148 RECT clr;
149 HBRUSH hbr;
150
151 switch(msg)
152 {
153 case WM_PAINT:
154 GetClientRect(hWnd, &clr);
155 //ClipRgn = CreateRectRgnIndirect(&clr);
156 hDC = BeginPaint(hWnd, &ps);
157 //Rect.left = 100;
158 //Rect.top = 100;
159 //Rect.right = 250;
160 //Rect.bottom = 150;
161 //FillRect(hDC, &Rect, CreateSolidBrush(RGB(0xFF, 0x00, 0x00)));
162 //ExcludeRgn = CreateRectRgnIndirect(&Rect);
163 //CombineRgn(ClipRgn, ClipRgn, ExcludeRgn, RGN_DIFF);
164 //DeleteObject(ExcludeRgn);
165 //Rect.left = 150;
166 //Rect.top = 150;
167 //Rect.right = 200;
168 //Rect.bottom = 250;
169 hbr = CreateSolidBrush(RGB(255, 255, 255));
170 FillRect ( hDC, &clr, hbr );
171 DeleteObject ( hbr );
172 DrawLines(hDC);
173 EndPaint(hWnd, &ps);
174 break;
175
176 case WM_DESTROY:
177 PostQuitMessage(0);
178 break;
179
180 default:
181 return DefWindowProc(hWnd, msg, wParam, lParam);
182 }
183 return 0;
184 }