1 // Static Control Test.c
2
3 //#define WIN32_LEAN_AND_MEAN
4 #include <windows.h>
5 #include <assert.h>
6
7 #ifndef SS_ENDELLIPSIS
8 #define SS_ENDELLIPSIS 0x00004000L
9 #endif /* SS_ENDELLIPSIS */
10
11
12 #define nMaxCtrls 32
13 #define nStaticWidth 384
14 #define nStaticHeight 18
15
16 HWND g_hwnd = NULL;
17 HINSTANCE g_hInst = 0;
18 int nNextCtrl = 0;
19 HWND g_hwndCtrl[nMaxCtrls];
20
CreateStatic(const char * lpWindowName,DWORD dwStyle)21 static void CreateStatic ( const char* lpWindowName, DWORD dwStyle )
22 {
23 int n = nNextCtrl++;
24 assert ( n < nMaxCtrls );
25 g_hwndCtrl[n] = CreateWindow (
26 "STATIC", // lpClassName
27 lpWindowName, // lpWindowName
28 WS_VISIBLE|WS_CHILD|dwStyle, // dwStyle
29 n+2, // x
30 nStaticHeight*n+1, // y
31 nStaticWidth, // nWidth
32 nStaticHeight-1, // nHeight
33 g_hwnd, // hWndParent
34 NULL, // hMenu
35 g_hInst, // hInstance
36 NULL ); // lParam
37 }
38
WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)39 LRESULT CALLBACK WndProc ( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
40 {
41 int i;
42 switch ( msg )
43 {
44 case WM_CREATE:
45 g_hwnd = hwnd;
46 for ( i = 0; i < nMaxCtrls; i++ )
47 g_hwndCtrl[i] = NULL;
48
49 CreateStatic ( "SS_NOTIFY test (click/double-click here)", SS_NOTIFY );
50
51 CreateStatic ( "SS_ENDELLIPSIS test test test test test test test test test test test", SS_ENDELLIPSIS );
52
53 CreateStatic ( "SS_CENTER test", SS_CENTER );
54
55 CreateStatic ( "SS_RIGHT test", SS_RIGHT );
56
57 CreateStatic ( "SS_BLACKFRAME test:", 0 );
58 CreateStatic ( "this text shouldn't be visible!", SS_BLACKFRAME );
59
60 CreateStatic ( "SS_BLACKRECT test:", 0 );
61 CreateStatic ( "this text shouldn't be visible!", SS_BLACKRECT );
62
63 CreateStatic ( "SS_ETCHEDFRAME test:", 0 );
64 CreateStatic ( "this text shouldn't be visible!", SS_ETCHEDFRAME );
65
66 CreateStatic ( "SS_ETCHEDHORZ test:", 0 );
67 CreateStatic ( "this text shouldn't be visible!", SS_ETCHEDHORZ );
68
69 CreateStatic ( "SS_ETCHEDVERT test", 0 );
70 CreateStatic ( "this text shouldn't be visible!", SS_ETCHEDVERT );
71
72 CreateStatic ( "SS_GRAYFRAME test", 0 );
73 CreateStatic ( "this text shouldn't be visible!", SS_GRAYFRAME );
74
75 CreateStatic ( "SS_GRAYRECT test", 0 );
76 CreateStatic ( "this text shouldn't be visible!", SS_GRAYRECT );
77
78 CreateStatic ( "SS_NOPREFIX &test", SS_NOPREFIX );
79
80 CreateStatic ( "SS_OWNERDRAW test", SS_OWNERDRAW );
81
82 CreateStatic ( "SS_SUNKEN test", SS_SUNKEN );
83
84 CreateStatic ( "SS_WHITEFRAME test:", 0 );
85 CreateStatic ( "this text shouldn't be visible!", SS_WHITEFRAME );
86
87 CreateStatic ( "SS_WHITERECT test:", 0 );
88 CreateStatic ( "this text shouldn't be visible!", SS_WHITERECT );
89
90 //if ( creation fails )
91 // return 0;
92 break;
93
94 case WM_COMMAND:
95 if ( HIWORD(wParam) == STN_CLICKED )
96 SetWindowText ( (HWND)lParam, "SS_NOTIFY:STN_CLICKED!" );
97 if ( HIWORD(wParam) == STN_DBLCLK )
98 SetWindowText ( (HWND)lParam, "SS_NOTIFY:STN_DBLCLK!" );
99 break;
100
101 case WM_DRAWITEM:
102 {
103 LPDRAWITEMSTRUCT lpDrawItem = (LPDRAWITEMSTRUCT)lParam;
104 DrawText ( lpDrawItem->hDC, "SS_DRAWITEM test successful!", 28, &(lpDrawItem->rcItem), 0 );
105 }
106 break;
107
108 case WM_DESTROY:
109 PostQuitMessage(0);
110 return 0;
111 }
112 return DefWindowProc ( hwnd, msg, wParam, lParam );
113 }
114
RegisterAndCreateWindow(HINSTANCE hInst,const char * className,const char * title)115 HWND RegisterAndCreateWindow (
116 HINSTANCE hInst,
117 const char* className,
118 const char* title )
119 {
120 WNDCLASSEX wc;
121 HWND hwnd;
122
123 g_hInst = hInst;
124
125 wc.cbSize = sizeof (WNDCLASSEX);
126 wc.lpfnWndProc = WndProc; // window procedure: mandatory
127 wc.hInstance = hInst; // owner of the class: mandatory
128 wc.lpszClassName = className; // mandatory
129 wc.hCursor = LoadCursor ( 0, (LPCTSTR)IDC_ARROW ); // optional
130 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // optional
131 wc.style = 0;
132 wc.cbClsExtra = 0;
133 wc.cbWndExtra = 0;
134 wc.hIcon = 0;
135 wc.hIconSm = 0;
136 wc.lpszMenuName = 0;
137 if ( !RegisterClassEx ( &wc ) )
138 return NULL;
139
140 hwnd = CreateWindowEx (
141 0, // dwStyleEx
142 className, // class name
143 title, // window title
144 WS_OVERLAPPEDWINDOW, // dwStyle
145 CW_USEDEFAULT, // x
146 CW_USEDEFAULT, // y
147 CW_USEDEFAULT, // width
148 CW_USEDEFAULT, // height
149 NULL, // hwndParent
150 NULL, // hMenu
151 hInst, // hInstance
152 0 ); // lParam
153
154 if ( !hwnd )
155 return NULL;
156
157 ShowWindow ( hwnd, SW_SHOW );
158 UpdateWindow ( hwnd );
159
160 return hwnd;
161 }
162
WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR cmdParam,int cmdShow)163 int WINAPI WinMain ( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdParam, int cmdShow )
164 {
165 char className [] = "Static Control Test";
166 HWND hwnd;
167 MSG msg;
168 int status;
169
170 hwnd = RegisterAndCreateWindow ( hInst, className, "Static Control Test" );
171
172 // Message loop
173 while ((status = GetMessage (& msg, 0, 0, 0)) != 0)
174 {
175 if (status == -1)
176 return -1;
177 DispatchMessage ( &msg );
178 }
179 return msg.wParam;
180 }
181