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 WINAPI 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 } 166