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 #include "windows.h"
20 #include "stdio.h"
21 #include "resource.h"
22
23 WCHAR WndClass[] = L"capicon_class";
24
25 HINSTANCE hInst;
26 INT testnum = 0;
27
28
WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)29 LRESULT CALLBACK WndProc(HWND hWnd,
30 UINT msg,
31 WPARAM wParam,
32 LPARAM lParam)
33 {
34 HICON hIcon;
35
36 switch (msg)
37 {
38 case WM_GETICON:
39 if(testnum>2)
40 {
41 if(wParam == ICON_SMALL)
42 hIcon = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON2SM));
43 else if(wParam == ICON_BIG)
44 hIcon = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON2BIG));
45 else hIcon = (HICON)1;
46
47 if(!hIcon)
48 {
49 printf("LoadIcon() failed: %d\n", (INT)GetLastError());
50 break;
51 }
52
53 return (LRESULT)hIcon;
54 }
55 break;
56
57 case WM_DESTROY:
58 PostQuitMessage(0);
59 return 0;
60 }
61
62 return DefWindowProc(hWnd, msg, wParam, lParam);
63 }
64
65
wmain(int argc,wchar_t ** argv)66 int wmain(int argc, wchar_t**argv)
67 {
68 HWND hWnd;
69 MSG msg;
70 WNDCLASSEX wcx;
71 UINT result;
72
73 if(argc<2)
74 {
75 printf("DrawCaption icon test.\n");
76 printf("USAGE: drawcap.exe <testnumber>\n\n");
77 printf("Available tests:\n"
78 "1. Class small icon\n"
79 "2. Class big icon\n"
80 "3. Class small icon + WM_GETICON\n"
81 "4. Class big icon + WM_GETICON\n"
82 "5. WM_GETICON only\n\n");
83 return 0;
84 }
85
86 testnum = _wtoi(argv[1]);
87 if(testnum < 1 || testnum > 5)
88 {
89 printf("Unknown test %d\n", testnum);
90 return 1;
91 }
92
93 hInst = GetModuleHandle(NULL);
94
95 memset(&wcx, 0, sizeof(wcx));
96 wcx.cbSize = sizeof(wcx);
97 wcx.style = CS_HREDRAW | CS_VREDRAW;
98 wcx.lpfnWndProc = (WNDPROC) WndProc;
99 wcx.hInstance = hInst;
100 wcx.hbrBackground = (HBRUSH)COLOR_WINDOW;
101 wcx.lpszClassName = WndClass;
102 if(testnum<5)wcx.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON1BIG));
103 if(testnum == 1 || testnum == 3)
104 wcx.hIconSm = LoadIcon(hInst, MAKEINTRESOURCE(ID_ICON1SM));
105
106 if(!(result = RegisterClassEx(&wcx)))
107 {
108 printf("Shit! RegisterClassEx failed: %d\n",
109 (int)GetLastError());
110 return 1;
111 }
112
113 hWnd = CreateWindowEx(0,
114 WndClass,
115 L"DrawCaption icon test",
116 WS_OVERLAPPED|WS_THICKFRAME|WS_SYSMENU,
117 CW_USEDEFAULT,
118 CW_USEDEFAULT,
119 250,
120 100,
121 NULL,
122 0,
123 hInst,
124 NULL);
125
126 if(!hWnd)
127 {
128 printf("Shit! Can't create wnd!\n");
129 UnregisterClass(WndClass, hInst);
130 return 1;
131 }
132
133
134 ShowWindow(hWnd, SW_SHOW);
135 UpdateWindow(hWnd);
136
137 while(GetMessage(&msg, NULL, 0, 0 ))
138 {
139 TranslateMessage(&msg);
140 DispatchMessage(&msg);
141 }
142
143 UnregisterClass(WndClass, hInst);
144 return 0;
145 }
146