Changeset 106 for trunk/src/comctl32/progress.c
- Timestamp:
- Jun 12, 1999, 10:44:07 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/comctl32/progress.c
r94 r106 1 /* $Id: progress.c,v 1. 2 1999-06-10 16:22:01 achimhaExp $ */2 /* 1 /* $Id: progress.c,v 1.3 1999-06-12 20:44:06 cbratschi Exp $ */ 2 /* 3 3 * Progress control 4 4 * … … 6 6 * Copyright 1998, 1999 Eric Kohl 7 7 * Copyright 1999 Achim Hasenmueller 8 * Copyright 1999 Christoph Bratschi 8 9 * 9 10 */ … … 23 24 //#define UNKNOWN_PARAM(msg, wParam, lParam) WARN(progress, \ 24 25 // "Unknown parameter(s) for message " #msg \ 25 // "(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam);26 #define UNKNOWN_PARAM(msg, wParam, lParam) 26 // "(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam); 27 #define UNKNOWN_PARAM(msg, wParam, lParam) 27 28 28 29 #define PROGRESS_GetInfoPtr(hwnd) ((PROGRESS_INFO *)GetWindowLongA(hwnd, 0)) … … 34 35 */ 35 36 static void 36 PROGRESS_Draw (HWND hwnd, HDC hdc )37 PROGRESS_Draw (HWND hwnd, HDC hdc, INT lastVal, BOOL inUpdate) 37 38 { 38 39 PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd); … … 43 44 44 45 // TRACE(progress, "refresh pos=%d min=%d, max=%d\n", 45 // 46 // infoPtr->CurVal, infoPtr->MinVal, infoPtr->MaxVal); 46 47 47 48 /* get the required bar brush */ … … 71 72 if (dwStyle & PBS_VERTICAL) 72 73 { 73 rightBar = rect.bottom - 74 rightBar = rect.bottom - 74 75 MulDiv(infoPtr->CurVal-infoPtr->MinVal, 75 76 76 rect.bottom - rect.top, 77 infoPtr->MaxVal-infoPtr->MinVal); 77 78 ledWidth = MulDiv ((rect.right - rect.left), 2, 3); 78 79 rightMost = rect.top; … … 80 81 else 81 82 { 82 rightBar = rect.left + 83 rightBar = rect.left + 83 84 MulDiv(infoPtr->CurVal-infoPtr->MinVal, 84 85 85 rect.right - rect.left, 86 infoPtr->MaxVal-infoPtr->MinVal); 86 87 ledWidth = MulDiv ((rect.bottom - rect.top), 2, 3); 87 88 rightMost = rect.right; … … 101 102 if (dwStyle & PBS_VERTICAL) 102 103 { 103 while(rect.bottom > rightBar) { 104 while(rect.bottom > rightBar) { 104 105 rect.top = rect.bottom-ledWidth; 105 106 if (rect.top < rightMost) … … 110 111 } 111 112 else { 112 while(rect.left < rightBar) { 113 while(rect.left < rightBar) { 113 114 rect.right = rect.left+ledWidth; 114 115 if (rect.right > rightMost) … … 130 131 131 132 /*********************************************************************** 133 * PROGRESS_Update (prototype, todo) 134 * Updates only the changed pixels -> faster, no flickering 135 */ 136 static void PROGRESS_Update(HWND hwnd,INT lastVal) 137 { 138 PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd); 139 HDC hdc; 140 141 if (lastVal != infoPtr->CurVal) //Only update if really necessary 142 { 143 hdc = GetDC(hwnd); 144 PROGRESS_Draw(hwnd,hdc,lastVal,TRUE); 145 ReleaseDC(hwnd,hdc); 146 } 147 } 148 149 /*********************************************************************** 132 150 * PROGRESS_Refresh 133 151 * Draw the progress bar. The background need not be erased. … … 139 157 140 158 hdc = GetDC (hwnd); 141 PROGRESS_Draw (hwnd, hdc );159 PROGRESS_Draw (hwnd, hdc, 0, FALSE); 142 160 ReleaseDC (hwnd, hdc); 143 161 } … … 155 173 156 174 hdc = BeginPaint (hwnd, &ps); 157 PROGRESS_Draw (hwnd, hdc );175 PROGRESS_Draw (hwnd, hdc, 0, FALSE); 158 176 EndPaint (hwnd, &ps); 159 177 } … … 166 184 static void PROGRESS_CoercePos(HWND hwnd) 167 185 { 168 PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd); 186 PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd); 169 187 170 188 if(infoPtr->CurVal < infoPtr->MinVal) … … 182 200 PROGRESS_SetFont (HWND hwnd, WPARAM wParam, LPARAM lParam) 183 201 { 184 PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd); 202 PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd); 185 203 HFONT hOldFont = infoPtr->hFont; 186 204 187 205 infoPtr->hFont = (HFONT)wParam; 188 206 if (LOWORD(lParam)) 189 207 PROGRESS_Refresh (hwnd); 190 208 return hOldFont; 191 209 } … … 195 213 * ProgressWindowProc 196 214 */ 197 LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message, 215 LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message, 198 216 WPARAM wParam, LPARAM lParam) 199 217 { 200 PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd); 218 PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd); 201 219 UINT temp; 202 220 … … 204 222 { 205 223 case WM_NCCREATE: 206 207 208 209 210 224 { 225 DWORD dwExStyle; 226 dwExStyle = GetWindowLongA(hwnd, GWL_EXSTYLE); 227 SetWindowLongA(hwnd, GWL_EXSTYLE, dwExStyle | WS_EX_STATICEDGE); 228 } 211 229 return TRUE; 212 230 213 231 case WM_CREATE: 214 232 /* allocate memory for info struct */ 215 infoPtr = 216 233 infoPtr = 234 (PROGRESS_INFO *)COMCTL32_Alloc (sizeof(PROGRESS_INFO)); 217 235 SetWindowLongA(hwnd, 0, (DWORD)infoPtr); 218 236 219 237 /* initialize the info struct */ 220 infoPtr->MinVal=0; 238 infoPtr->MinVal=0; 221 239 infoPtr->MaxVal=100; 222 infoPtr->CurVal=0; 240 infoPtr->CurVal=0; 223 241 infoPtr->Step=10; 224 242 infoPtr->ColorBar=CLR_DEFAULT; … … 227 245 // TRACE(progress, "Progress Ctrl creation, hwnd=%04x\n", hwnd); 228 246 break; 229 247 230 248 case WM_DESTROY: 231 249 // TRACE (progress, "Progress Ctrl destruction, hwnd=%04x\n", hwnd); … … 235 253 case WM_ERASEBKGND: 236 254 /* pretend to erase it here, but we will do it in the paint 237 255 function to avoid flicker */ 238 256 return 1; 239 257 240 258 case WM_GETFONT: 241 259 return (LRESULT)infoPtr->hFont; … … 247 265 PROGRESS_Paint (hwnd); 248 266 break; 249 267 250 268 case PBM_DELTAPOS: 251 269 if(lParam) 252 270 UNKNOWN_PARAM(PBM_DELTAPOS, wParam, lParam); 253 271 temp = infoPtr->CurVal; 254 272 if(wParam != 0){ 255 infoPtr->CurVal += (UINT16)wParam; 256 257 PROGRESS_Refresh (hwnd);273 infoPtr->CurVal += (INT)wParam; //CB: negative values allowed, was UINT16 274 PROGRESS_CoercePos (hwnd); 275 PROGRESS_Update (hwnd,temp); 258 276 } 259 277 return temp; … … 261 279 case PBM_SETPOS: 262 280 if (lParam) 263 281 UNKNOWN_PARAM(PBM_SETPOS, wParam, lParam); 264 282 temp = infoPtr->CurVal; 265 283 if(temp != wParam){ 266 267 268 PROGRESS_Refresh (hwnd);269 } 270 return temp; 271 284 infoPtr->CurVal = (UINT16)wParam; 285 PROGRESS_CoercePos(hwnd); 286 PROGRESS_Update (hwnd,temp); 287 } 288 return temp; 289 272 290 case PBM_SETRANGE: 273 291 if (wParam) 274 292 UNKNOWN_PARAM(PBM_SETRANGE, wParam, lParam); 275 293 temp = MAKELONG(infoPtr->MinVal, infoPtr->MaxVal); 276 294 if(temp != lParam){ 277 infoPtr->MinVal = LOWORD(lParam); 278 279 280 281 282 295 infoPtr->MinVal = LOWORD(lParam); 296 infoPtr->MaxVal = HIWORD(lParam); 297 if(infoPtr->MaxVal <= infoPtr->MinVal) 298 infoPtr->MaxVal = infoPtr->MinVal+1; 299 PROGRESS_CoercePos(hwnd); 300 PROGRESS_Refresh (hwnd); 283 301 } 284 302 return temp; … … 286 304 case PBM_SETSTEP: 287 305 if (lParam) 288 289 temp = infoPtr->Step; 290 infoPtr->Step = (UINT16)wParam; 306 UNKNOWN_PARAM(PBM_SETSTEP, wParam, lParam); 307 temp = infoPtr->Step; 308 infoPtr->Step = (UINT16)wParam; 291 309 return temp; 292 310 293 311 case PBM_STEPIT: 294 312 if (wParam || lParam) 295 296 temp = infoPtr->CurVal; 313 UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam); 314 temp = infoPtr->CurVal; 297 315 infoPtr->CurVal += infoPtr->Step; 298 316 if(infoPtr->CurVal > infoPtr->MaxVal) 299 317 infoPtr->CurVal = infoPtr->MinVal; 300 318 if(temp != infoPtr->CurVal) 301 PROGRESS_Refresh (hwnd);319 PROGRESS_Update (hwnd,temp); 302 320 return temp; 303 321 … … 306 324 if((infoPtr->MinVal != (INT)wParam) || 307 325 (infoPtr->MaxVal != (INT)lParam)) { 308 309 310 311 312 313 314 } 315 return temp; 316 326 infoPtr->MinVal = (INT)wParam; 327 infoPtr->MaxVal = (INT)lParam; 328 if(infoPtr->MaxVal <= infoPtr->MinVal) 329 infoPtr->MaxVal = infoPtr->MinVal+1; 330 PROGRESS_CoercePos(hwnd); 331 PROGRESS_Refresh (hwnd); 332 } 333 return temp; 334 317 335 case PBM_GETRANGE: 318 336 if (lParam){ … … 324 342 case PBM_GETPOS: 325 343 if (wParam || lParam) 326 344 UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam); 327 345 return (infoPtr->CurVal); 328 346 329 347 case PBM_SETBARCOLOR: 330 348 if (wParam) 331 332 infoPtr->ColorBar = (COLORREF)lParam; 349 UNKNOWN_PARAM(PBM_SETBARCOLOR, wParam, lParam); 350 infoPtr->ColorBar = (COLORREF)lParam; 333 351 PROGRESS_Refresh (hwnd); 334 352 break; … … 336 354 case PBM_SETBKCOLOR: 337 355 if (wParam) 338 356 UNKNOWN_PARAM(PBM_SETBKCOLOR, wParam, lParam); 339 357 infoPtr->ColorBk = (COLORREF)lParam; 340 358 PROGRESS_Refresh (hwnd); 341 359 break; 342 360 343 default: 344 // if (message >= WM_USER) 345 // ERR(progress, "unknown msg %04x wp=%04x lp=%08lx\n",346 // 347 return DefWindowProcA( hwnd, message, wParam, lParam ); 348 } 361 default: 362 // if (message >= WM_USER) 363 // ERR(progress, "unknown msg %04x wp=%04x lp=%08lx\n", 364 // message, wParam, lParam ); 365 return DefWindowProcA( hwnd, message, wParam, lParam ); 366 } 349 367 350 368 return 0; … … 387 405 { 388 406 if (GlobalFindAtomA(PROGRESS_CLASSA)) 389 390 } 391 407 UnregisterClassA(PROGRESS_CLASSA, (HINSTANCE)NULL); 408 } 409
Note:
See TracChangeset
for help on using the changeset viewer.