6271a6af02d106f7896c30e9553ed986d48f2c60
[reactos.git] / rostests / win32 / user32 / sysicon / sysicon.c
1 /*
2 * Copyright 2006 Saveliy Tretiakov
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18
19 /* This testapp demonstrates WS_SYSMENU + WS_EX_DLGMODALFRAME
20 * behavior and shows that DrawCaption does care
21 * about WS_EX_DLGMODALFRAME and WS_EX_TOOLWINDOW
22 */
23
24 #include <windows.h>
25 #include <stdio.h>
26
27 WCHAR WndClass[] = L"sysicon_class";
28 HICON hIcon = NULL, hIconSm = NULL;
29
30 LRESULT CALLBACK WndProc(HWND hWnd,
31 UINT msg,
32 WPARAM wParam,
33 LPARAM lParam)
34 {
35 switch (msg)
36 {
37 case WM_PAINT:
38 {
39 HDC hDc;
40 PAINTSTRUCT Ps;
41 RECT Rect;
42 GetClientRect(hWnd, &Rect);
43
44 Rect.left = 10;
45 Rect.top = 10;
46 Rect.right -= 10;
47 Rect.bottom = 25;
48
49 hDc = BeginPaint(hWnd, &Ps);
50 SetBkMode(hDc, TRANSPARENT);
51
52 DrawCaption(hWnd, hDc, &Rect, DC_GRADIENT | DC_ACTIVE | DC_TEXT | DC_ICON);
53
54 EndPaint(hWnd, &Ps);
55
56 return 0;
57 }
58
59 case WM_DESTROY:
60 PostQuitMessage(0);
61 return 0;
62 }
63
64 return DefWindowProcW(hWnd, msg, wParam, lParam);
65 }
66
67 int APIENTRY wWinMain(HINSTANCE hInst,
68 HINSTANCE hPrevInstance,
69 LPWSTR lpCmdLine,
70 int nCmdShow)
71 {
72 HWND hWnd1a, hWnd1b, hWnd2a, hWnd2b, hWnd3a, hWnd3b;
73 MSG msg;
74 WNDCLASSEXW wcx;
75 UINT result;
76
77 memset(&wcx, 0, sizeof(wcx));
78 wcx.cbSize = sizeof(wcx);
79 wcx.lpfnWndProc = (WNDPROC) WndProc;
80 wcx.hInstance = hInst;
81 wcx.hbrBackground = (HBRUSH)COLOR_WINDOW;
82 wcx.lpszClassName = WndClass;
83
84 if (!(result = RegisterClassExW(&wcx)))
85 return 1;
86
87 /* Load the user icons */
88 hIcon = (HICON)LoadImageW(hInst, MAKEINTRESOURCEW(100), IMAGE_ICON, 0, 0, LR_SHARED | LR_DEFAULTSIZE);
89 hIconSm = (HICON)CopyImage(hIcon, IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_COPYFROMRESOURCE);
90
91 /* WS_EX_DLGMODALFRAME */
92 hWnd1a = CreateWindowExW(WS_EX_DLGMODALFRAME,
93 WndClass,
94 L"WS_SYSMENU | WS_EX_DLGMODALFRAME without user icon",
95 WS_CAPTION | WS_SYSMENU ,
96 CW_USEDEFAULT, CW_USEDEFAULT,
97 400, 100,
98 NULL, 0,
99 hInst, NULL);
100 if (!hWnd1a)
101 return 1;
102
103 ShowWindow(hWnd1a, SW_SHOW);
104 UpdateWindow(hWnd1a);
105
106 /* WS_EX_DLGMODALFRAME */
107 hWnd1b = CreateWindowExW(WS_EX_DLGMODALFRAME,
108 WndClass,
109 L"WS_SYSMENU | WS_EX_DLGMODALFRAME with user icon",
110 WS_CAPTION | WS_SYSMENU ,
111 CW_USEDEFAULT, CW_USEDEFAULT,
112 400, 100,
113 NULL, 0,
114 hInst, NULL);
115
116 if (!hWnd1b)
117 return 1;
118
119 ShowWindow(hWnd1b, SW_SHOW);
120 UpdateWindow(hWnd1b);
121 SendMessageW(hWnd1b, WM_SETICON, ICON_SMALL, (LPARAM)hIconSm);
122 SendMessageW(hWnd1b, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
123
124 hWnd2a = CreateWindowExW(WS_EX_TOOLWINDOW,
125 WndClass,
126 L"WS_SYSMENU | WS_EX_TOOLWINDOW without user icon",
127 WS_CAPTION | WS_SYSMENU ,
128 CW_USEDEFAULT, CW_USEDEFAULT,
129 400, 100,
130 NULL, 0,
131 hInst, NULL);
132 if (!hWnd2a)
133 return 1;
134
135 ShowWindow(hWnd2a, SW_SHOW);
136 UpdateWindow(hWnd2a);
137
138 hWnd2b = CreateWindowExW(WS_EX_TOOLWINDOW,
139 WndClass,
140 L"WS_SYSMENU | WS_EX_TOOLWINDOW with user icon",
141 WS_CAPTION | WS_SYSMENU ,
142 CW_USEDEFAULT, CW_USEDEFAULT,
143 400, 100,
144 NULL, 0,
145 hInst, NULL);
146 if (!hWnd2b)
147 return 1;
148
149 ShowWindow(hWnd2b, SW_SHOW);
150 UpdateWindow(hWnd2b);
151 SendMessageW(hWnd2b, WM_SETICON, ICON_SMALL, (LPARAM)hIconSm);
152 SendMessageW(hWnd2b, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
153
154 hWnd3a = CreateWindowExW(0,
155 WndClass,
156 L"WS_SYSMENU without user icon",
157 WS_CAPTION | WS_SYSMENU,
158 CW_USEDEFAULT, CW_USEDEFAULT,
159 400, 100,
160 NULL, 0,
161 hInst, NULL);
162 if (!hWnd3a)
163 return 1;
164
165 ShowWindow(hWnd3a, SW_SHOW);
166 UpdateWindow(hWnd3a);
167
168 hWnd3b = CreateWindowExW(0,
169 WndClass,
170 L"WS_SYSMENU with user icon",
171 WS_CAPTION | WS_SYSMENU,
172 CW_USEDEFAULT, CW_USEDEFAULT,
173 400, 100,
174 NULL, 0,
175 hInst, NULL);
176 if (!hWnd3b)
177 return 1;
178
179 ShowWindow(hWnd3b, SW_SHOW);
180 UpdateWindow(hWnd3b);
181 SendMessageW(hWnd3b, WM_SETICON, ICON_SMALL, (LPARAM)hIconSm);
182 SendMessageW(hWnd3b, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
183
184 while(GetMessageW(&msg, NULL, 0, 0 ))
185 {
186 TranslateMessage(&msg);
187 DispatchMessageW(&msg);
188 }
189
190 if (hIcon) DestroyIcon(hIcon);
191 if (hIconSm) DestroyIcon(hIconSm);
192
193 UnregisterClassW(WndClass, hInst);
194 return 0;
195 }