Adding rostests as part of the tree restructure
[reactos.git] / rostests / tests / statst / statst.c
1 //#define WIN32_LEAN_AND_MEAN
2 #include <windows.h>
3
4 static LPSTR STATIC_CLASS = "STATIC";
5 static LPSTR TEST_WND_CLASS = "TESTWND";
6
7 #ifdef NDEBUG
8 #define DPRINT(s) (void)0
9 #else
10 #define DPRINT(s) OutputDebugStringA("STATICTEST: " s "\n")
11 #endif
12
13 HINSTANCE AppInstance = NULL;
14
15 LRESULT WmCreate(
16 HWND Wnd)
17 {
18 UCHAR i;
19 DPRINT("WM_CREATE (enter).");
20 // Test 1 - black rectangle.
21 DPRINT("test 1");
22 CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_BLACKRECT,
23 10, 10, 100, 20, Wnd, NULL, AppInstance, NULL);
24 // Test 2 - black frame.
25 DPRINT("test 2");
26 CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_BLACKFRAME,
27 10, 40, 100, 20, Wnd, NULL, AppInstance, NULL);
28 // Test 3 - gray rectangle.
29 DPRINT("test 3");
30 CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_GRAYRECT,
31 10, 70, 100, 20, Wnd, NULL, AppInstance, NULL);
32 // Test 4 - gray frame.
33 DPRINT("test 4");
34 CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_GRAYFRAME,
35 10, 100, 100, 20, Wnd, NULL, AppInstance, NULL);
36 // Test 5 - left-aligned text.
37 DPRINT("test 5");
38 CreateWindowEx(0, STATIC_CLASS,
39 "&Left-aligned text &static control window",
40 WS_CHILD | WS_VISIBLE | SS_LEFT,
41 10, 130, 100, 50, Wnd, NULL, AppInstance, NULL);
42 // Test 6 - right-aligned text.
43 DPRINT("test 6");
44 CreateWindowEx(0, STATIC_CLASS,
45 "&Right-aligned text &static control window",
46 WS_CHILD | WS_VISIBLE | SS_RIGHT,
47 10, 185, 100, 50, Wnd, NULL, AppInstance, NULL);
48 // Test 7 - centered text.
49 DPRINT("test 7");
50 CreateWindowEx(0, STATIC_CLASS,
51 "&Centered text &static control window",
52 WS_CHILD | WS_VISIBLE | SS_CENTER,
53 10, 240, 100, 50, Wnd, NULL, AppInstance, NULL);
54 // Test 8 - left-aligned text with no word wrap and no prefixes.
55 DPRINT("test 8");
56 CreateWindowEx(0, STATIC_CLASS,
57 "&No prefix and no word wrapping",
58 WS_CHILD | WS_VISIBLE | SS_LEFTNOWORDWRAP | SS_NOPREFIX,
59 10, 295, 100, 20, Wnd, NULL, AppInstance, NULL);
60 // Test 9 - white rectangle.
61 DPRINT("test 9");
62 CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_WHITERECT,
63 120, 10, 100, 20, Wnd, NULL, AppInstance, NULL);
64 // Test 10 - white frame.
65 DPRINT("test 10");
66 CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE | SS_WHITEFRAME,
67 120, 40, 100, 20, Wnd, NULL, AppInstance, NULL);
68 // Test 11 - etched frame.
69 DPRINT("test 11");
70 CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE
71 | SS_ETCHEDFRAME, 120, 70, 100, 20, Wnd, NULL, AppInstance, NULL);
72 // Test 12 - etched horizontal lines.
73 DPRINT("test 12");
74 for (i = 0; i < 5; ++i)
75 CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE
76 | SS_ETCHEDHORZ, 120, 100 + (4L * i), 100, 4, Wnd,
77 NULL, AppInstance, NULL);
78 // Test 13 - etched vertical lines.
79 DPRINT("test 13");
80 for (i = 0; i < 25; ++i)
81 CreateWindowEx(0, STATIC_CLASS, NULL, WS_CHILD | WS_VISIBLE
82 | SS_ETCHEDVERT, 120 + (4L * i), 130, 4, 20, Wnd,
83 NULL, AppInstance, NULL);
84 // Test 14 - sunken border.
85 DPRINT("test 14");
86 CreateWindowEx(0, STATIC_CLASS,
87 "Sunken frame and word ellipsis",
88 WS_CHILD | WS_VISIBLE | SS_SUNKEN | SS_WORDELLIPSIS,
89 120, 160, 100, 20, Wnd, NULL, AppInstance, NULL);
90 DPRINT("WM_CREATE (leave).");
91 return 0;
92 }
93
94 LRESULT CALLBACK TestWndProc(
95 HWND Wnd,
96 UINT Msg,
97 WPARAM wParam,
98 LPARAM lParam)
99 {
100 switch (Msg) {
101 case WM_CREATE:
102 return WmCreate(Wnd);
103 case WM_DESTROY:
104 PostQuitMessage(0);
105 return 0;
106 default:
107 return DefWindowProc(Wnd, Msg, wParam, lParam);
108 }
109 }
110
111 int STDCALL WinMain(
112 HINSTANCE hInstance,
113 HINSTANCE hPrevInstance,
114 LPSTR lpCmdLine,
115 int nShowCmd)
116 {
117 ATOM Result;
118 MSG Msg;
119 HWND MainWindow;
120 WNDCLASSEX TestWndClass = {0};
121 DPRINT("Application starting up.");
122 // Remember instance handle.
123 AppInstance = GetModuleHandle(NULL);
124 // Register test window class.
125 TestWndClass.cbSize = sizeof(WNDCLASSEX);
126 TestWndClass.lpfnWndProc = &TestWndProc;
127 TestWndClass.hInstance = AppInstance;
128 TestWndClass.hCursor = LoadCursor(0, (LPCTSTR)IDC_ARROW);
129 TestWndClass.hbrBackground = CreateSolidBrush(RGB(255,255,230));
130 TestWndClass.lpszClassName = TEST_WND_CLASS;
131 Result = RegisterClassEx(&TestWndClass);
132 if (Result == 0) {
133 DPRINT("Error registering class.");
134 MessageBox(0, "Error registering test window class.",
135 "Static control test", MB_ICONSTOP | MB_OK);
136 ExitProcess(0);
137 }
138 // Create main window.
139 DPRINT("Creating main window.");
140 MainWindow = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_CLIENTEDGE,
141 TEST_WND_CLASS, "Static control test",
142 WS_OVERLAPPEDWINDOW, 50, 50, 245, 365,
143 NULL, NULL, AppInstance, NULL);
144 if (MainWindow == 0) {
145 DPRINT("Error creating main window.");
146 UnregisterClass(TEST_WND_CLASS, AppInstance);
147 MessageBox(0, "Error creating test window.",
148 "Static control test", MB_ICONSTOP | MB_OK);
149 ExitProcess(0);
150 }
151 DPRINT("Showing main window.");
152 ShowWindow(MainWindow, SW_SHOWNORMAL);
153 UpdateWindow(MainWindow);
154 // Run message loop.
155 DPRINT("Entering message loop.");
156 while (GetMessage(&Msg, NULL, 0, 0) > 0) {
157 TranslateMessage(&Msg);
158 DispatchMessage(&Msg);
159 }
160 // Unregister window class.
161 UnregisterClass(TEST_WND_CLASS, AppInstance);
162 DPRINT("Exiting.");
163
164 return Msg.wParam;
165 }