update for HEAD-2003091401
[reactos.git] / apps / 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, 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 }