6271a6af02d106f7896c30e9553ed986d48f2c60
2 * Copyright 2006 Saveliy Tretiakov
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.
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.
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.
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
27 WCHAR WndClass
[] = L
"sysicon_class";
28 HICON hIcon
= NULL
, hIconSm
= NULL
;
30 LRESULT CALLBACK
WndProc(HWND hWnd
,
42 GetClientRect(hWnd
, &Rect
);
49 hDc
= BeginPaint(hWnd
, &Ps
);
50 SetBkMode(hDc
, TRANSPARENT
);
52 DrawCaption(hWnd
, hDc
, &Rect
, DC_GRADIENT
| DC_ACTIVE
| DC_TEXT
| DC_ICON
);
64 return DefWindowProcW(hWnd
, msg
, wParam
, lParam
);
67 int APIENTRY
wWinMain(HINSTANCE hInst
,
68 HINSTANCE hPrevInstance
,
72 HWND hWnd1a
, hWnd1b
, hWnd2a
, hWnd2b
, hWnd3a
, hWnd3b
;
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
;
84 if (!(result
= RegisterClassExW(&wcx
)))
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
);
91 /* WS_EX_DLGMODALFRAME */
92 hWnd1a
= CreateWindowExW(WS_EX_DLGMODALFRAME
,
94 L
"WS_SYSMENU | WS_EX_DLGMODALFRAME without user icon",
95 WS_CAPTION
| WS_SYSMENU
,
96 CW_USEDEFAULT
, CW_USEDEFAULT
,
103 ShowWindow(hWnd1a
, SW_SHOW
);
104 UpdateWindow(hWnd1a
);
106 /* WS_EX_DLGMODALFRAME */
107 hWnd1b
= CreateWindowExW(WS_EX_DLGMODALFRAME
,
109 L
"WS_SYSMENU | WS_EX_DLGMODALFRAME with user icon",
110 WS_CAPTION
| WS_SYSMENU
,
111 CW_USEDEFAULT
, CW_USEDEFAULT
,
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
);
124 hWnd2a
= CreateWindowExW(WS_EX_TOOLWINDOW
,
126 L
"WS_SYSMENU | WS_EX_TOOLWINDOW without user icon",
127 WS_CAPTION
| WS_SYSMENU
,
128 CW_USEDEFAULT
, CW_USEDEFAULT
,
135 ShowWindow(hWnd2a
, SW_SHOW
);
136 UpdateWindow(hWnd2a
);
138 hWnd2b
= CreateWindowExW(WS_EX_TOOLWINDOW
,
140 L
"WS_SYSMENU | WS_EX_TOOLWINDOW with user icon",
141 WS_CAPTION
| WS_SYSMENU
,
142 CW_USEDEFAULT
, CW_USEDEFAULT
,
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
);
154 hWnd3a
= CreateWindowExW(0,
156 L
"WS_SYSMENU without user icon",
157 WS_CAPTION
| WS_SYSMENU
,
158 CW_USEDEFAULT
, CW_USEDEFAULT
,
165 ShowWindow(hWnd3a
, SW_SHOW
);
166 UpdateWindow(hWnd3a
);
168 hWnd3b
= CreateWindowExW(0,
170 L
"WS_SYSMENU with user icon",
171 WS_CAPTION
| WS_SYSMENU
,
172 CW_USEDEFAULT
, CW_USEDEFAULT
,
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
);
184 while(GetMessageW(&msg
, NULL
, 0, 0 ))
186 TranslateMessage(&msg
);
187 DispatchMessageW(&msg
);
190 if (hIcon
) DestroyIcon(hIcon
);
191 if (hIconSm
) DestroyIcon(hIconSm
);
193 UnregisterClassW(WndClass
, hInst
);