Ignore:
Timestamp:
Jun 28, 1999, 5:46:28 PM (26 years ago)
Author:
cbratschi
Message:

bug fixes (unicode) and improvements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/comctl32/progress.c

    r219 r236  
    1 /* $Id: progress.c,v 1.6 1999-06-26 14:20:31 cbratschi Exp $ */
     1/* $Id: progress.c,v 1.7 1999-06-28 15:46:25 cbratschi Exp $ */
    22/*
    33 * Progress control
     
    284284
    285285
     286static LRESULT PROGRESS_NCCreate(HWND hwnd,WPARAM wParam,LPARAM lParam)
     287{
     288  DWORD dwExStyle;
     289
     290  dwExStyle = GetWindowLongA(hwnd,GWL_EXSTYLE);
     291  SetWindowLongA(hwnd,GWL_EXSTYLE,dwExStyle | WS_EX_STATICEDGE);
     292
     293  return TRUE;
     294}
     295
     296static LRESULT PROGRESS_Create(HWND hwnd,WPARAM wParam,LPARAM lParam)
     297{
     298  PROGRESS_INFO *infoPtr;
     299
     300  /* allocate memory for info struct */
     301  infoPtr = (PROGRESS_INFO *)COMCTL32_Alloc(sizeof(PROGRESS_INFO));
     302  SetWindowLongA(hwnd,0,(DWORD)infoPtr);
     303
     304  /* initialize the info struct */
     305  infoPtr->MinVal = 0;
     306  infoPtr->MaxVal = 100;
     307  infoPtr->CurVal = 0;
     308  infoPtr->Step = 10;
     309  infoPtr->ColorBar = CLR_DEFAULT;
     310  infoPtr->ColorBk = CLR_DEFAULT;
     311  infoPtr->hFont = (HANDLE)NULL;
     312//      TRACE(progress, "Progress Ctrl creation, hwnd=%04x\n", hwnd);
     313
     314  return 0;
     315}
     316
     317static LRESULT PROGRESS_Destroy(HWND hwnd,WPARAM wParam,LPARAM lParam)
     318{
     319  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     320
     321  //      TRACE (progress, "Progress Ctrl destruction, hwnd=%04x\n", hwnd);
     322  COMCTL32_Free (infoPtr);
     323
     324  return 0;
     325}
     326
     327static LRESULT PROGRESS_GetFont(HWND hwnd,WPARAM wParam,LPARAM lParam)
     328{
     329  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     330
     331  return (LRESULT)infoPtr->hFont;
     332}
     333
    286334/***********************************************************************
    287335 *           PROGRESS_SetFont
    288336 * Set new Font for progress bar
    289337 */
    290 static HFONT
    291 PROGRESS_SetFont (HWND hwnd, WPARAM wParam, LPARAM lParam)
    292 {
    293     PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     338static HFONT PROGRESS_SetFont (HWND hwnd,WPARAM wParam,LPARAM lParam)
     339{
     340  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
    294341  HFONT hOldFont = infoPtr->hFont;
    295342
    296343  infoPtr->hFont = (HFONT)wParam;
    297   if (LOWORD(lParam))
    298         PROGRESS_Refresh (hwnd);
     344  if (LOWORD(lParam)) PROGRESS_Refresh (hwnd);
     345
    299346  return hOldFont;
    300347}
    301348
     349static LRESULT PROGRESS_DeltaPos(HWND hwnd,WPARAM wParam,LPARAM lParam)
     350{
     351  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     352  INT temp;
     353
     354  //if(lParam) UNKNOWN_PARAM(PBM_DELTAPOS, wParam, lParam);
     355  temp = infoPtr->CurVal;
     356  if (wParam != 0)
     357  {
     358    infoPtr->CurVal += (INT)wParam;
     359    PROGRESS_CoercePos(hwnd);
     360    PROGRESS_Update(hwnd,temp);
     361  }
     362
     363  return temp;
     364}
     365
     366static LRESULT PROGRESS_SetPos(HWND hwnd,WPARAM wParam,LPARAM lParam)
     367{
     368  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     369  INT temp;
     370
     371  //if (lParam) UNKNOWN_PARAM(PBM_SETPOS, wParam, lParam);
     372  temp = infoPtr->CurVal;
     373  if (temp != wParam)
     374  {
     375    infoPtr->CurVal = (UINT16)wParam; //CB: 0..65535 allowed
     376    PROGRESS_CoercePos(hwnd);
     377    PROGRESS_Update(hwnd,temp);
     378  }
     379
     380  return temp;
     381}
     382
     383static LRESULT PROGRESS_SetRange(HWND hwnd,WPARAM wParam,LPARAM lParam)
     384{
     385  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     386  INT temp;
     387
     388  //if (wParam) UNKNOWN_PARAM(PBM_SETRANGE, wParam, lParam);
     389  temp = MAKELONG(infoPtr->MinVal,infoPtr->MaxVal);
     390  if (temp != lParam)
     391  {
     392    infoPtr->MinVal = LOWORD(lParam);
     393    infoPtr->MaxVal = HIWORD(lParam);
     394    if (infoPtr->MaxVal <= infoPtr->MinVal) infoPtr->MaxVal = infoPtr->MinVal+1;
     395    PROGRESS_CoercePos(hwnd);
     396    PROGRESS_Refresh(hwnd);
     397  }
     398
     399  return temp;
     400}
     401
     402static LRESULT PROGRESS_SetStep(HWND hwnd,WPARAM wParam,LPARAM lParam)
     403{
     404  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     405  INT temp;
     406
     407  //if (lParam) UNKNOWN_PARAM(PBM_SETSTEP, wParam, lParam);
     408  temp = infoPtr->Step;
     409  infoPtr->Step = (INT)wParam; //CB: negative steps allowed
     410
     411  return temp;
     412}
     413
     414static LRESULT PROGRESS_StepIt(HWND hwnd,WPARAM wParam,LPARAM lParam)
     415{
     416  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     417  INT temp;
     418
     419  //if (wParam || lParam) UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
     420  temp = infoPtr->CurVal;
     421  infoPtr->CurVal += infoPtr->Step;
     422  if(infoPtr->CurVal > infoPtr->MaxVal) infoPtr->CurVal = infoPtr->MinVal;
     423  if(temp != infoPtr->CurVal) PROGRESS_Update (hwnd,temp);
     424
     425  return temp;
     426}
     427
     428static LRESULT PROGRESS_SetRange32(HWND hwnd,WPARAM wParam,LPARAM lParam)
     429{
     430  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     431  INT temp;
     432
     433  temp = MAKELONG(infoPtr->MinVal,infoPtr->MaxVal);
     434  if((infoPtr->MinVal != (INT)wParam) || (infoPtr->MaxVal != (INT)lParam))
     435  {
     436    infoPtr->MinVal = (INT)wParam;
     437    infoPtr->MaxVal = (INT)lParam;
     438    if(infoPtr->MaxVal <= infoPtr->MinVal) infoPtr->MaxVal = infoPtr->MinVal+1;
     439    PROGRESS_CoercePos(hwnd);
     440    PROGRESS_Refresh(hwnd);
     441  }
     442
     443  return temp;
     444}
     445
     446static LRESULT PROGRESS_GetRange(HWND hwnd,WPARAM wParam,LPARAM lParam)
     447{
     448  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     449
     450  if (lParam)
     451  {
     452    ((PPBRANGE)lParam)->iLow = infoPtr->MinVal;
     453    ((PPBRANGE)lParam)->iHigh = infoPtr->MaxVal;
     454  }
     455
     456  return (wParam) ? infoPtr->MinVal : infoPtr->MaxVal;
     457}
     458
     459static LRESULT PROGRESS_GetPos(HWND hwnd,WPARAM wParam,LPARAM lParam)
     460{
     461  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     462
     463  //if (wParam || lParam) UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
     464
     465  return (infoPtr->CurVal);
     466}
     467
     468static LRESULT PROGRESS_SetBarColor(HWND hwnd,WPARAM wParam,LPARAM lParam)
     469{
     470  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     471  COLORREF oldColorBar = infoPtr->ColorBar;
     472
     473  //if (wParam) UNKNOWN_PARAM(PBM_SETBARCOLOR, wParam, lParam);
     474  infoPtr->ColorBar = (COLORREF)lParam;
     475  if (infoPtr->ColorBar != oldColorBar) PROGRESS_Refresh(hwnd);
     476
     477  return 0;
     478}
     479
     480static LRESULT PROGRESS_SetBkColor(HWND hwnd,WPARAM wParam,LPARAM lParam)
     481{
     482  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     483  COLORREF oldColorBk = infoPtr->ColorBk;
     484
     485  //if (wParam) UNKNOWN_PARAM(PBM_SETBKCOLOR, wParam, lParam);
     486  infoPtr->ColorBk = (COLORREF)lParam;
     487  if (infoPtr->ColorBk != oldColorBk) PROGRESS_Refresh (hwnd);
     488
     489  return 0;
     490}
    302491
    303492/***********************************************************************
     
    307496                                  WPARAM wParam, LPARAM lParam)
    308497{
    309     PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
    310   INT temp;
    311 
    312498  switch(message)
    313499    {
    314500    case WM_NCCREATE:
    315             {
    316                 DWORD dwExStyle;
    317                 dwExStyle = GetWindowLongA(hwnd, GWL_EXSTYLE);
    318                 SetWindowLongA(hwnd, GWL_EXSTYLE, dwExStyle | WS_EX_STATICEDGE);
    319             }
    320       return TRUE;
     501      return PROGRESS_NCCreate(hwnd,wParam,lParam);
    321502
    322503    case WM_CREATE:
    323       /* allocate memory for info struct */
    324       infoPtr =
    325         (PROGRESS_INFO *)COMCTL32_Alloc (sizeof(PROGRESS_INFO));
    326       SetWindowLongA(hwnd, 0, (DWORD)infoPtr);
    327 
    328       /* initialize the info struct */
    329       infoPtr->MinVal=0;
    330       infoPtr->MaxVal=100;
    331       infoPtr->CurVal=0;
    332       infoPtr->Step=10;
    333       infoPtr->ColorBar=CLR_DEFAULT;
    334       infoPtr->ColorBk=CLR_DEFAULT;
    335       infoPtr->hFont=(HANDLE)NULL;
    336 //      TRACE(progress, "Progress Ctrl creation, hwnd=%04x\n", hwnd);
    337       break;
     504      return PROGRESS_Create(hwnd,wParam,lParam);
    338505
    339506    case WM_DESTROY:
    340 //      TRACE (progress, "Progress Ctrl destruction, hwnd=%04x\n", hwnd);
    341       COMCTL32_Free (infoPtr);
    342       break;
     507      return PROGRESS_Destroy(hwnd,wParam,lParam);
    343508
    344509    case WM_ERASEBKGND:
     
    348513
    349514    case WM_GETFONT:
    350       return (LRESULT)infoPtr->hFont;
     515      return PROGRESS_GetFont(hwnd,wParam,lParam);
    351516
    352517    case WM_SETFONT:
    353       return PROGRESS_SetFont (hwnd, wParam, lParam);
     518      return PROGRESS_SetFont (hwnd,wParam,lParam);
    354519
    355520    case WM_PAINT:
    356       PROGRESS_Paint (hwnd);
     521      PROGRESS_Paint(hwnd);
    357522      break;
    358523
    359524    case PBM_DELTAPOS:
    360       if(lParam)
    361         UNKNOWN_PARAM(PBM_DELTAPOS, wParam, lParam);
    362       temp = infoPtr->CurVal;
    363       if(wParam != 0){
    364         infoPtr->CurVal += (INT)wParam;
    365         PROGRESS_CoercePos (hwnd);
    366         PROGRESS_Update (hwnd,temp);
    367       }
    368       return temp;
     525      return PROGRESS_DeltaPos(hwnd,wParam,lParam);
    369526
    370527    case PBM_SETPOS:
    371       if (lParam)
    372         UNKNOWN_PARAM(PBM_SETPOS, wParam, lParam);
    373       temp = infoPtr->CurVal;
    374       if(temp != wParam){
    375         infoPtr->CurVal = (UINT16)wParam; //CB: 0..65535 allowed
    376         PROGRESS_CoercePos(hwnd);
    377         PROGRESS_Update (hwnd,temp);
    378       }
    379       return temp;
     528      return PROGRESS_SetPos(hwnd,wParam,lParam);
    380529
    381530    case PBM_SETRANGE:
    382       if (wParam)
    383         UNKNOWN_PARAM(PBM_SETRANGE, wParam, lParam);
    384       temp = MAKELONG(infoPtr->MinVal, infoPtr->MaxVal);
    385       if(temp != lParam){
    386         infoPtr->MinVal = LOWORD(lParam);
    387         infoPtr->MaxVal = HIWORD(lParam);
    388         if(infoPtr->MaxVal <= infoPtr->MinVal)
    389           infoPtr->MaxVal = infoPtr->MinVal+1;
    390         PROGRESS_CoercePos(hwnd);
    391         PROGRESS_Refresh (hwnd);
    392       }
    393       return temp;
     531      return PROGRESS_SetRange(hwnd,wParam,lParam);
    394532
    395533    case PBM_SETSTEP:
    396       if (lParam)
    397         UNKNOWN_PARAM(PBM_SETSTEP, wParam, lParam);
    398       temp = infoPtr->Step;
    399       infoPtr->Step = (INT)wParam; //CB: negative steps allowed
    400       return temp;
     534      return PROGRESS_SetStep(hwnd,wParam,lParam);
    401535
    402536    case PBM_STEPIT:
    403       if (wParam || lParam)
    404         UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
    405       temp = infoPtr->CurVal;
    406       infoPtr->CurVal += infoPtr->Step;
    407       if(infoPtr->CurVal > infoPtr->MaxVal)
    408         infoPtr->CurVal = infoPtr->MinVal;
    409       if(temp != infoPtr->CurVal)
    410         PROGRESS_Update (hwnd,temp);
    411       return temp;
     537      return PROGRESS_StepIt(hwnd,wParam,lParam);
    412538
    413539    case PBM_SETRANGE32:
    414       temp = MAKELONG(infoPtr->MinVal, infoPtr->MaxVal);
    415       if((infoPtr->MinVal != (INT)wParam) ||
    416          (infoPtr->MaxVal != (INT)lParam)) {
    417         infoPtr->MinVal = (INT)wParam;
    418         infoPtr->MaxVal = (INT)lParam;
    419         if(infoPtr->MaxVal <= infoPtr->MinVal)
    420           infoPtr->MaxVal = infoPtr->MinVal+1;
    421         PROGRESS_CoercePos(hwnd);
    422         PROGRESS_Refresh (hwnd);
    423       }
    424       return temp;
     540      return PROGRESS_SetRange32(hwnd,wParam,lParam);
    425541
    426542    case PBM_GETRANGE:
    427       if (lParam){
    428         ((PPBRANGE)lParam)->iLow = infoPtr->MinVal;
    429         ((PPBRANGE)lParam)->iHigh = infoPtr->MaxVal;
    430       }
    431       return (wParam) ? infoPtr->MinVal : infoPtr->MaxVal;
     543      return PROGRESS_GetRange(hwnd,wParam,lParam);
    432544
    433545    case PBM_GETPOS:
    434       if (wParam || lParam)
    435         UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
    436       return (infoPtr->CurVal);
     546      return PROGRESS_GetPos(hwnd,wParam,lParam);
    437547
    438548    case PBM_SETBARCOLOR:
    439       if (wParam)
    440         UNKNOWN_PARAM(PBM_SETBARCOLOR, wParam, lParam);
    441       infoPtr->ColorBar = (COLORREF)lParam;
    442       PROGRESS_Refresh (hwnd);
    443       break;
     549      return PROGRESS_SetBarColor(hwnd,wParam,lParam);
    444550
    445551    case PBM_SETBKCOLOR:
    446       if (wParam)
    447         UNKNOWN_PARAM(PBM_SETBKCOLOR, wParam, lParam);
    448       infoPtr->ColorBk = (COLORREF)lParam;
    449       PROGRESS_Refresh (hwnd);
    450       break;
     552      return PROGRESS_SetBkColor(hwnd,wParam,lParam);
    451553
    452554    default:
Note: See TracChangeset for help on using the changeset viewer.