blob: a7a3fc7968af448ae3c4f2834ff0b9f0e2956db8 [file] [log] [blame]
Alexandre Julliard77b99181997-09-14 17:17:23 +00001/*
2 * Progress control
3 *
4 * Copyright 1997 Dimitrie O. Paun
Eric Kohlfa8ae2f1999-03-12 17:40:32 +00005 * Copyright 1998, 1999 Eric Kohl
Alexandre Julliard77b99181997-09-14 17:17:23 +00006 *
Alexandre Julliard77b99181997-09-14 17:17:23 +00007 */
8
Alexandre Julliarddadf78f1998-05-17 17:13:43 +00009#include "commctrl.h"
Alexandre Julliardd30dfd21998-09-27 18:28:36 +000010#include "progress.h"
Alexandre Julliard77b99181997-09-14 17:17:23 +000011#include "win.h"
Alexandre Julliard77b99181997-09-14 17:17:23 +000012#include "debug.h"
13
Alexandre Julliarddadf78f1998-05-17 17:13:43 +000014
Alexandre Julliard77b99181997-09-14 17:17:23 +000015/* Control configuration constants */
16
Alexandre Julliard77b99181997-09-14 17:17:23 +000017#define LED_GAP 2
18
19/* Work constants */
20
Alexandre Julliarda69b88b1998-03-15 20:29:56 +000021#define UNKNOWN_PARAM(msg, wParam, lParam) WARN(progress, \
22 "Unknown parameter(s) for message " #msg \
Alexandre Julliard77b99181997-09-14 17:17:23 +000023 "(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam);
24
Eric Kohlfa8ae2f1999-03-12 17:40:32 +000025#define PROGRESS_GetInfoPtr(hwnd) ((PROGRESS_INFO *)GetWindowLongA(hwnd, 0))
Alexandre Julliard77b99181997-09-14 17:17:23 +000026
27
28/***********************************************************************
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +000029 * PROGRESS_Draw
30 * Draws the progress bar.
Alexandre Julliard77b99181997-09-14 17:17:23 +000031 */
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +000032static void
Eric Kohlfa8ae2f1999-03-12 17:40:32 +000033PROGRESS_Draw (HWND hwnd, HDC hdc)
Alexandre Julliard77b99181997-09-14 17:17:23 +000034{
Eric Kohlfa8ae2f1999-03-12 17:40:32 +000035 PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
Alexandre Julliarda3960291999-02-26 11:11:13 +000036 HBRUSH hbrBar, hbrBk;
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000037 int rightBar, rightMost, ledWidth;
Alexandre Julliarda3960291999-02-26 11:11:13 +000038 RECT rect;
Eric Kohlfa8ae2f1999-03-12 17:40:32 +000039 DWORD dwStyle;
Alexandre Julliard77b99181997-09-14 17:17:23 +000040
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +000041 TRACE(progress, "refresh pos=%d min=%d, max=%d\n",
Alexandre Julliarda69b88b1998-03-15 20:29:56 +000042 infoPtr->CurVal, infoPtr->MinVal, infoPtr->MaxVal);
Alexandre Julliard77b99181997-09-14 17:17:23 +000043
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000044 /* get the required bar brush */
45 if (infoPtr->ColorBar == CLR_DEFAULT)
Alexandre Julliarda3960291999-02-26 11:11:13 +000046 hbrBar = GetSysColorBrush(COLOR_HIGHLIGHT);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000047 else
Alexandre Julliarda3960291999-02-26 11:11:13 +000048 hbrBar = CreateSolidBrush (infoPtr->ColorBar);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000049
50 /* get the required background brush */
Alexandre Julliarddadf78f1998-05-17 17:13:43 +000051 if (infoPtr->ColorBk == CLR_DEFAULT)
Alexandre Julliarda3960291999-02-26 11:11:13 +000052 hbrBk = GetSysColorBrush (COLOR_3DFACE);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000053 else
Alexandre Julliarda3960291999-02-26 11:11:13 +000054 hbrBk = CreateSolidBrush (infoPtr->ColorBk);
Alexandre Julliard77b99181997-09-14 17:17:23 +000055
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +000056 /* get client rectangle */
Eric Kohlfa8ae2f1999-03-12 17:40:32 +000057 GetClientRect (hwnd, &rect);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000058
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +000059 /* draw the background */
Alexandre Julliarda3960291999-02-26 11:11:13 +000060 FillRect(hdc, &rect, hbrBk);
Alexandre Julliarddadf78f1998-05-17 17:13:43 +000061
Alexandre Julliard77b99181997-09-14 17:17:23 +000062 rect.left++; rect.right--; rect.top++; rect.bottom--;
Alexandre Julliard77b99181997-09-14 17:17:23 +000063
Eric Kohlfa8ae2f1999-03-12 17:40:32 +000064 /* get the window style */
65 dwStyle = GetWindowLongA (hwnd, GWL_STYLE);
66
Alexandre Julliard77b99181997-09-14 17:17:23 +000067 /* compute extent of progress bar */
Eric Kohlfa8ae2f1999-03-12 17:40:32 +000068 if (dwStyle & PBS_VERTICAL)
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000069 {
70 rightBar = rect.bottom -
Alexandre Julliarda3960291999-02-26 11:11:13 +000071 MulDiv(infoPtr->CurVal-infoPtr->MinVal,
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000072 rect.bottom - rect.top,
73 infoPtr->MaxVal-infoPtr->MinVal);
Alexandre Julliarda3960291999-02-26 11:11:13 +000074 ledWidth = MulDiv ((rect.right - rect.left), 2, 3);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000075 rightMost = rect.top;
76 }
77 else
78 {
79 rightBar = rect.left +
Alexandre Julliarda3960291999-02-26 11:11:13 +000080 MulDiv(infoPtr->CurVal-infoPtr->MinVal,
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000081 rect.right - rect.left,
82 infoPtr->MaxVal-infoPtr->MinVal);
Alexandre Julliarda3960291999-02-26 11:11:13 +000083 ledWidth = MulDiv ((rect.bottom - rect.top), 2, 3);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000084 rightMost = rect.right;
85 }
Alexandre Julliard77b99181997-09-14 17:17:23 +000086
87 /* now draw the bar */
Eric Kohlfa8ae2f1999-03-12 17:40:32 +000088 if (dwStyle & PBS_SMOOTH)
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000089 {
Eric Kohlfa8ae2f1999-03-12 17:40:32 +000090 if (dwStyle & PBS_VERTICAL)
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000091 rect.top = rightBar;
92 else
93 rect.right = rightBar;
Alexandre Julliarda3960291999-02-26 11:11:13 +000094 FillRect(hdc, &rect, hbrBar);
Alexandre Julliard77b99181997-09-14 17:17:23 +000095 }
Alexandre Julliardc7c217b1998-04-13 12:21:30 +000096 else
97 {
Eric Kohlfa8ae2f1999-03-12 17:40:32 +000098 if (dwStyle & PBS_VERTICAL)
99 {
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000100 while(rect.bottom > rightBar) {
101 rect.top = rect.bottom-ledWidth;
102 if (rect.top < rightMost)
103 rect.top = rightMost;
Alexandre Julliarda3960291999-02-26 11:11:13 +0000104 FillRect(hdc, &rect, hbrBar);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000105 rect.bottom = rect.top-LED_GAP;
106 }
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000107 }
108 else {
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000109 while(rect.left < rightBar) {
110 rect.right = rect.left+ledWidth;
111 if (rect.right > rightMost)
112 rect.right = rightMost;
Alexandre Julliarda3960291999-02-26 11:11:13 +0000113 FillRect(hdc, &rect, hbrBar);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000114 rect.left = rect.right+LED_GAP;
115 }
116 }
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000117 }
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000118
119 /* delete bar brush */
120 if (infoPtr->ColorBar != CLR_DEFAULT)
Alexandre Julliarda3960291999-02-26 11:11:13 +0000121 DeleteObject (hbrBar);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000122
123 /* delete background brush */
124 if (infoPtr->ColorBk != CLR_DEFAULT)
Alexandre Julliarda3960291999-02-26 11:11:13 +0000125 DeleteObject (hbrBk);
Alexandre Julliard77b99181997-09-14 17:17:23 +0000126}
127
128/***********************************************************************
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +0000129 * PROGRESS_Refresh
130 * Draw the progress bar. The background need not be erased.
131 */
132static void
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000133PROGRESS_Refresh (HWND hwnd)
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +0000134{
Alexandre Julliarda3960291999-02-26 11:11:13 +0000135 HDC hdc;
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +0000136
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000137 hdc = GetDC (hwnd);
138 PROGRESS_Draw (hwnd, hdc);
139 ReleaseDC (hwnd, hdc);
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +0000140}
141
142/***********************************************************************
143 * PROGRESS_Paint
144 * Draw the progress bar. The background need not be erased.
145 * If dc!=0, it draws on it
146 */
147static void
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000148PROGRESS_Paint (HWND hwnd)
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +0000149{
Alexandre Julliarda3960291999-02-26 11:11:13 +0000150 PAINTSTRUCT ps;
151 HDC hdc;
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +0000152
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000153 hdc = BeginPaint (hwnd, &ps);
154 PROGRESS_Draw (hwnd, hdc);
155 EndPaint (hwnd, &ps);
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +0000156}
157
158
159/***********************************************************************
Alexandre Julliard77b99181997-09-14 17:17:23 +0000160 * PROGRESS_CoercePos
161 * Makes sure the current position (CUrVal) is within bounds.
162 */
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000163static void PROGRESS_CoercePos(HWND hwnd)
Alexandre Julliard77b99181997-09-14 17:17:23 +0000164{
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000165 PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
Alexandre Julliard77b99181997-09-14 17:17:23 +0000166
167 if(infoPtr->CurVal < infoPtr->MinVal)
168 infoPtr->CurVal = infoPtr->MinVal;
169 if(infoPtr->CurVal > infoPtr->MaxVal)
170 infoPtr->CurVal = infoPtr->MaxVal;
171}
172
Eric Kohl8305ad51999-01-24 19:09:24 +0000173
174/***********************************************************************
175 * PROGRESS_SetFont
176 * Set new Font for progress bar
177 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000178static HFONT
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000179PROGRESS_SetFont (HWND hwnd, WPARAM wParam, LPARAM lParam)
Eric Kohl8305ad51999-01-24 19:09:24 +0000180{
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000181 PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
Alexandre Julliarda3960291999-02-26 11:11:13 +0000182 HFONT hOldFont = infoPtr->hFont;
Eric Kohl8305ad51999-01-24 19:09:24 +0000183
Alexandre Julliarda3960291999-02-26 11:11:13 +0000184 infoPtr->hFont = (HFONT)wParam;
Eric Kohl8305ad51999-01-24 19:09:24 +0000185 if (LOWORD(lParam))
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000186 PROGRESS_Refresh (hwnd);
Eric Kohl8305ad51999-01-24 19:09:24 +0000187 return hOldFont;
188}
189
190
Alexandre Julliard77b99181997-09-14 17:17:23 +0000191/***********************************************************************
192 * ProgressWindowProc
193 */
Alexandre Julliarda3960291999-02-26 11:11:13 +0000194LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message,
195 WPARAM wParam, LPARAM lParam)
Alexandre Julliard77b99181997-09-14 17:17:23 +0000196{
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000197 PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
Alexandre Julliarda3960291999-02-26 11:11:13 +0000198 UINT temp;
Alexandre Julliard77b99181997-09-14 17:17:23 +0000199
200 switch(message)
201 {
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +0000202 case WM_NCCREATE:
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000203 {
204 DWORD dwExStyle;
205 dwExStyle = GetWindowLongA (hwnd, GWL_EXSTYLE);
206 SetWindowLongA (hwnd, GWL_EXSTYLE, dwExStyle | WS_EX_STATICEDGE);
207 }
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +0000208 return TRUE;
209
Alexandre Julliard77b99181997-09-14 17:17:23 +0000210 case WM_CREATE:
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000211 /* allocate memory for info struct */
Alexandre Julliardebfc0fe1998-06-28 18:40:26 +0000212 infoPtr =
Alexandre Julliardd30dfd21998-09-27 18:28:36 +0000213 (PROGRESS_INFO *)COMCTL32_Alloc (sizeof(PROGRESS_INFO));
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000214 SetWindowLongA (hwnd, 0, (DWORD)infoPtr);
Alexandre Julliarda845b881998-06-01 10:44:35 +0000215
Alexandre Julliard77b99181997-09-14 17:17:23 +0000216 /* initialize the info struct */
217 infoPtr->MinVal=0;
218 infoPtr->MaxVal=100;
219 infoPtr->CurVal=0;
220 infoPtr->Step=10;
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000221 infoPtr->ColorBar=CLR_DEFAULT;
222 infoPtr->ColorBk=CLR_DEFAULT;
Alexandre Julliarda3960291999-02-26 11:11:13 +0000223 infoPtr->hFont=(HANDLE)NULL;
Alexandre Julliarda845b881998-06-01 10:44:35 +0000224 TRACE(progress, "Progress Ctrl creation, hwnd=%04x\n", hwnd);
Alexandre Julliard77b99181997-09-14 17:17:23 +0000225 break;
226
227 case WM_DESTROY:
Alexandre Julliardd30dfd21998-09-27 18:28:36 +0000228 TRACE (progress, "Progress Ctrl destruction, hwnd=%04x\n", hwnd);
229 COMCTL32_Free (infoPtr);
Alexandre Julliard77b99181997-09-14 17:17:23 +0000230 break;
231
232 case WM_ERASEBKGND:
233 /* pretend to erase it here, but we will do it in the paint
234 function to avoid flicker */
235 return 1;
236
237 case WM_GETFONT:
Eric Kohl8305ad51999-01-24 19:09:24 +0000238 return (LRESULT)infoPtr->hFont;
Alexandre Julliard77b99181997-09-14 17:17:23 +0000239
240 case WM_SETFONT:
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000241 return PROGRESS_SetFont (hwnd, wParam, lParam);
Alexandre Julliard77b99181997-09-14 17:17:23 +0000242
243 case WM_PAINT:
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000244 PROGRESS_Paint (hwnd);
Alexandre Julliard77b99181997-09-14 17:17:23 +0000245 break;
246
247 case PBM_DELTAPOS:
248 if(lParam)
249 UNKNOWN_PARAM(PBM_DELTAPOS, wParam, lParam);
250 temp = infoPtr->CurVal;
251 if(wParam != 0){
252 infoPtr->CurVal += (UINT16)wParam;
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000253 PROGRESS_CoercePos (hwnd);
254 PROGRESS_Refresh (hwnd);
Alexandre Julliard77b99181997-09-14 17:17:23 +0000255 }
256 return temp;
257
258 case PBM_SETPOS:
259 if (lParam)
260 UNKNOWN_PARAM(PBM_SETPOS, wParam, lParam);
261 temp = infoPtr->CurVal;
262 if(temp != wParam){
263 infoPtr->CurVal = (UINT16)wParam;
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000264 PROGRESS_CoercePos(hwnd);
265 PROGRESS_Refresh (hwnd);
Alexandre Julliard77b99181997-09-14 17:17:23 +0000266 }
267 return temp;
268
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000269 case PBM_SETRANGE:
Alexandre Julliard77b99181997-09-14 17:17:23 +0000270 if (wParam)
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000271 UNKNOWN_PARAM(PBM_SETRANGE, wParam, lParam);
Alexandre Julliard77b99181997-09-14 17:17:23 +0000272 temp = MAKELONG(infoPtr->MinVal, infoPtr->MaxVal);
273 if(temp != lParam){
274 infoPtr->MinVal = LOWORD(lParam);
275 infoPtr->MaxVal = HIWORD(lParam);
276 if(infoPtr->MaxVal <= infoPtr->MinVal)
277 infoPtr->MaxVal = infoPtr->MinVal+1;
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000278 PROGRESS_CoercePos(hwnd);
279 PROGRESS_Refresh (hwnd);
Alexandre Julliard77b99181997-09-14 17:17:23 +0000280 }
281 return temp;
282
283 case PBM_SETSTEP:
284 if (lParam)
285 UNKNOWN_PARAM(PBM_SETSTEP, wParam, lParam);
286 temp = infoPtr->Step;
287 infoPtr->Step = (UINT16)wParam;
288 return temp;
289
290 case PBM_STEPIT:
291 if (wParam || lParam)
292 UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
293 temp = infoPtr->CurVal;
294 infoPtr->CurVal += infoPtr->Step;
295 if(infoPtr->CurVal > infoPtr->MaxVal)
296 infoPtr->CurVal = infoPtr->MinVal;
297 if(temp != infoPtr->CurVal)
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000298 PROGRESS_Refresh (hwnd);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000299 return temp;
300
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000301 case PBM_SETRANGE32:
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000302 temp = MAKELONG(infoPtr->MinVal, infoPtr->MaxVal);
Alexandre Julliarda3960291999-02-26 11:11:13 +0000303 if((infoPtr->MinVal != (INT)wParam) ||
304 (infoPtr->MaxVal != (INT)lParam)) {
305 infoPtr->MinVal = (INT)wParam;
306 infoPtr->MaxVal = (INT)lParam;
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000307 if(infoPtr->MaxVal <= infoPtr->MinVal)
308 infoPtr->MaxVal = infoPtr->MinVal+1;
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000309 PROGRESS_CoercePos(hwnd);
310 PROGRESS_Refresh (hwnd);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000311 }
Alexandre Julliard77b99181997-09-14 17:17:23 +0000312 return temp;
313
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000314 case PBM_GETRANGE:
315 if (lParam){
316 ((PPBRANGE)lParam)->iLow = infoPtr->MinVal;
317 ((PPBRANGE)lParam)->iHigh = infoPtr->MaxVal;
318 }
319 return (wParam) ? infoPtr->MinVal : infoPtr->MaxVal;
320
321 case PBM_GETPOS:
322 if (wParam || lParam)
323 UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
324 return (infoPtr->CurVal);
325
326 case PBM_SETBARCOLOR:
327 if (wParam)
328 UNKNOWN_PARAM(PBM_SETBARCOLOR, wParam, lParam);
329 infoPtr->ColorBar = (COLORREF)lParam;
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000330 PROGRESS_Refresh (hwnd);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000331 break;
332
333 case PBM_SETBKCOLOR:
334 if (wParam)
335 UNKNOWN_PARAM(PBM_SETBKCOLOR, wParam, lParam);
336 infoPtr->ColorBk = (COLORREF)lParam;
Eric Kohlfa8ae2f1999-03-12 17:40:32 +0000337 PROGRESS_Refresh (hwnd);
Alexandre Julliardc7c217b1998-04-13 12:21:30 +0000338 break;
339
Alexandre Julliard77b99181997-09-14 17:17:23 +0000340 default:
341 if (message >= WM_USER)
Alexandre Julliarda69b88b1998-03-15 20:29:56 +0000342 ERR(progress, "unknown msg %04x wp=%04x lp=%08lx\n",
343 message, wParam, lParam );
Alexandre Julliarda3960291999-02-26 11:11:13 +0000344 return DefWindowProcA( hwnd, message, wParam, lParam );
Alexandre Julliard77b99181997-09-14 17:17:23 +0000345 }
346
347 return 0;
348}
349
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000350
351/***********************************************************************
Alexandre Julliardd30dfd21998-09-27 18:28:36 +0000352 * PROGRESS_Register [Internal]
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000353 *
354 * Registers the progress bar window class.
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000355 */
Alexandre Julliardd30dfd21998-09-27 18:28:36 +0000356
Eric Kohl9d8e8641998-10-24 10:49:27 +0000357VOID
358PROGRESS_Register (VOID)
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000359{
Alexandre Julliarda3960291999-02-26 11:11:13 +0000360 WNDCLASSA wndClass;
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000361
Alexandre Julliarda3960291999-02-26 11:11:13 +0000362 if (GlobalFindAtomA (PROGRESS_CLASSA)) return;
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000363
Alexandre Julliarda3960291999-02-26 11:11:13 +0000364 ZeroMemory (&wndClass, sizeof( WNDCLASSA));
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000365 wndClass.style = CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW;
Alexandre Julliarda3960291999-02-26 11:11:13 +0000366 wndClass.lpfnWndProc = (WNDPROC)ProgressWindowProc;
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000367 wndClass.cbClsExtra = 0;
Eric Kohl9d8e8641998-10-24 10:49:27 +0000368 wndClass.cbWndExtra = sizeof (PROGRESS_INFO *);
Alexandre Julliarda3960291999-02-26 11:11:13 +0000369 wndClass.hCursor = LoadCursorA (0, IDC_ARROWA);
370 wndClass.lpszClassName = PROGRESS_CLASSA;
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000371
Alexandre Julliarda3960291999-02-26 11:11:13 +0000372 RegisterClassA (&wndClass);
Eric Kohl9d8e8641998-10-24 10:49:27 +0000373}
374
375
376/***********************************************************************
377 * PROGRESS_Unregister [Internal]
378 *
379 * Unregisters the progress bar window class.
380 */
381
382VOID
383PROGRESS_Unregister (VOID)
384{
Alexandre Julliarda3960291999-02-26 11:11:13 +0000385 if (GlobalFindAtomA (PROGRESS_CLASSA))
386 UnregisterClassA (PROGRESS_CLASSA, (HINSTANCE)NULL);
Alexandre Julliarddadf78f1998-05-17 17:13:43 +0000387}
388