Changeset 106 for trunk/src


Ignore:
Timestamp:
Jun 12, 1999, 10:44:07 PM (26 years ago)
Author:
cbratschi
Message:

aaa

Location:
trunk/src
Files:
2 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 achimha Exp $ */
    2 /*             
     1/* $Id: progress.c,v 1.3 1999-06-12 20:44:06 cbratschi Exp $ */
     2/*
    33 * Progress control
    44 *
     
    66 * Copyright 1998, 1999 Eric Kohl
    77 * Copyright 1999 Achim Hasenmueller
     8 * Copyright 1999 Christoph Bratschi
    89 *
    910 */
     
    2324//#define UNKNOWN_PARAM(msg, wParam, lParam) WARN(progress, \
    2425//        "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)
    2728
    2829#define PROGRESS_GetInfoPtr(hwnd) ((PROGRESS_INFO *)GetWindowLongA(hwnd, 0))
     
    3435 */
    3536static void
    36 PROGRESS_Draw (HWND hwnd, HDC hdc)
     37PROGRESS_Draw (HWND hwnd, HDC hdc, INT lastVal, BOOL inUpdate)
    3738{
    3839  PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
     
    4344
    4445//  TRACE(progress, "refresh pos=%d min=%d, max=%d\n",
    45 //             infoPtr->CurVal, infoPtr->MinVal, infoPtr->MaxVal);
     46//             infoPtr->CurVal, infoPtr->MinVal, infoPtr->MaxVal);
    4647
    4748  /* get the required bar brush */
     
    7172  if (dwStyle & PBS_VERTICAL)
    7273  {
    73     rightBar = rect.bottom - 
     74    rightBar = rect.bottom -
    7475      MulDiv(infoPtr->CurVal-infoPtr->MinVal,
    75                rect.bottom - rect.top,
    76                infoPtr->MaxVal-infoPtr->MinVal);
     76               rect.bottom - rect.top,
     77               infoPtr->MaxVal-infoPtr->MinVal);
    7778    ledWidth = MulDiv ((rect.right - rect.left), 2, 3);
    7879    rightMost = rect.top;
     
    8081  else
    8182  {
    82     rightBar = rect.left + 
     83    rightBar = rect.left +
    8384      MulDiv(infoPtr->CurVal-infoPtr->MinVal,
    84                rect.right - rect.left,
    85                infoPtr->MaxVal-infoPtr->MinVal);
     85               rect.right - rect.left,
     86               infoPtr->MaxVal-infoPtr->MinVal);
    8687    ledWidth = MulDiv ((rect.bottom - rect.top), 2, 3);
    8788    rightMost = rect.right;
     
    101102    if (dwStyle & PBS_VERTICAL)
    102103  {
    103       while(rect.bottom > rightBar) { 
     104      while(rect.bottom > rightBar) {
    104105        rect.top = rect.bottom-ledWidth;
    105106        if (rect.top < rightMost)
     
    110111    }
    111112    else {
    112       while(rect.left < rightBar) { 
     113      while(rect.left < rightBar) {
    113114        rect.right = rect.left+ledWidth;
    114115        if (rect.right > rightMost)
     
    130131
    131132/***********************************************************************
     133 * PROGRESS_Update (prototype, todo)
     134 * Updates only the changed pixels -> faster, no flickering
     135 */
     136static 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/***********************************************************************
    132150 * PROGRESS_Refresh
    133151 * Draw the progress bar. The background need not be erased.
     
    139157
    140158    hdc = GetDC (hwnd);
    141     PROGRESS_Draw (hwnd, hdc);
     159    PROGRESS_Draw (hwnd, hdc, 0, FALSE);
    142160    ReleaseDC (hwnd, hdc);
    143161}
     
    155173
    156174    hdc = BeginPaint (hwnd, &ps);
    157     PROGRESS_Draw (hwnd, hdc);
     175    PROGRESS_Draw (hwnd, hdc, 0, FALSE);
    158176    EndPaint (hwnd, &ps);
    159177}
     
    166184static void PROGRESS_CoercePos(HWND hwnd)
    167185{
    168     PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd); 
     186    PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
    169187
    170188  if(infoPtr->CurVal < infoPtr->MinVal)
     
    182200PROGRESS_SetFont (HWND hwnd, WPARAM wParam, LPARAM lParam)
    183201{
    184     PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd); 
     202    PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
    185203  HFONT hOldFont = infoPtr->hFont;
    186204
    187205  infoPtr->hFont = (HFONT)wParam;
    188206  if (LOWORD(lParam))
    189         PROGRESS_Refresh (hwnd);
     207        PROGRESS_Refresh (hwnd);
    190208  return hOldFont;
    191209}
     
    195213 *           ProgressWindowProc
    196214 */
    197 LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message, 
     215LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message,
    198216                                  WPARAM wParam, LPARAM lParam)
    199217{
    200     PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd); 
     218    PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(hwnd);
    201219  UINT temp;
    202220
     
    204222    {
    205223    case WM_NCCREATE:
    206             {
    207                 DWORD dwExStyle;
    208                 dwExStyle = GetWindowLongA(hwnd, GWL_EXSTYLE);
    209                 SetWindowLongA(hwnd, GWL_EXSTYLE, dwExStyle | WS_EX_STATICEDGE);
    210             }
     224            {
     225                DWORD dwExStyle;
     226                dwExStyle = GetWindowLongA(hwnd, GWL_EXSTYLE);
     227                SetWindowLongA(hwnd, GWL_EXSTYLE, dwExStyle | WS_EX_STATICEDGE);
     228            }
    211229      return TRUE;
    212230
    213231    case WM_CREATE:
    214232      /* allocate memory for info struct */
    215       infoPtr = 
    216         (PROGRESS_INFO *)COMCTL32_Alloc (sizeof(PROGRESS_INFO));
     233      infoPtr =
     234        (PROGRESS_INFO *)COMCTL32_Alloc (sizeof(PROGRESS_INFO));
    217235      SetWindowLongA(hwnd, 0, (DWORD)infoPtr);
    218236
    219237      /* initialize the info struct */
    220       infoPtr->MinVal=0; 
     238      infoPtr->MinVal=0;
    221239      infoPtr->MaxVal=100;
    222       infoPtr->CurVal=0; 
     240      infoPtr->CurVal=0;
    223241      infoPtr->Step=10;
    224242      infoPtr->ColorBar=CLR_DEFAULT;
     
    227245//      TRACE(progress, "Progress Ctrl creation, hwnd=%04x\n", hwnd);
    228246      break;
    229    
     247
    230248    case WM_DESTROY:
    231249//      TRACE (progress, "Progress Ctrl destruction, hwnd=%04x\n", hwnd);
     
    235253    case WM_ERASEBKGND:
    236254      /* pretend to erase it here, but we will do it in the paint
    237         function to avoid flicker */
     255        function to avoid flicker */
    238256      return 1;
    239        
     257
    240258    case WM_GETFONT:
    241259      return (LRESULT)infoPtr->hFont;
     
    247265      PROGRESS_Paint (hwnd);
    248266      break;
    249    
     267
    250268    case PBM_DELTAPOS:
    251269      if(lParam)
    252         UNKNOWN_PARAM(PBM_DELTAPOS, wParam, lParam);
     270        UNKNOWN_PARAM(PBM_DELTAPOS, wParam, lParam);
    253271      temp = infoPtr->CurVal;
    254272      if(wParam != 0){
    255         infoPtr->CurVal += (UINT16)wParam;
    256         PROGRESS_CoercePos (hwnd);
    257         PROGRESS_Refresh (hwnd);
     273        infoPtr->CurVal += (INT)wParam; //CB: negative values allowed, was UINT16
     274        PROGRESS_CoercePos (hwnd);
     275        PROGRESS_Update (hwnd,temp);
    258276      }
    259277      return temp;
     
    261279    case PBM_SETPOS:
    262280      if (lParam)
    263         UNKNOWN_PARAM(PBM_SETPOS, wParam, lParam);
     281        UNKNOWN_PARAM(PBM_SETPOS, wParam, lParam);
    264282      temp = infoPtr->CurVal;
    265283      if(temp != wParam){
    266         infoPtr->CurVal = (UINT16)wParam;
    267         PROGRESS_CoercePos(hwnd);
    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
    272290    case PBM_SETRANGE:
    273291      if (wParam)
    274         UNKNOWN_PARAM(PBM_SETRANGE, wParam, lParam);
     292        UNKNOWN_PARAM(PBM_SETRANGE, wParam, lParam);
    275293      temp = MAKELONG(infoPtr->MinVal, infoPtr->MaxVal);
    276294      if(temp != lParam){
    277         infoPtr->MinVal = LOWORD(lParam);
    278         infoPtr->MaxVal = HIWORD(lParam);
    279         if(infoPtr->MaxVal <= infoPtr->MinVal)
    280           infoPtr->MaxVal = infoPtr->MinVal+1;
    281         PROGRESS_CoercePos(hwnd);
    282         PROGRESS_Refresh (hwnd);
     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);
    283301      }
    284302      return temp;
     
    286304    case PBM_SETSTEP:
    287305      if (lParam)
    288         UNKNOWN_PARAM(PBM_SETSTEP, wParam, lParam);
    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;
    291309      return temp;
    292310
    293311    case PBM_STEPIT:
    294312      if (wParam || lParam)
    295         UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
    296       temp = infoPtr->CurVal;   
     313        UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
     314      temp = infoPtr->CurVal;
    297315      infoPtr->CurVal += infoPtr->Step;
    298316      if(infoPtr->CurVal > infoPtr->MaxVal)
    299         infoPtr->CurVal = infoPtr->MinVal;
     317        infoPtr->CurVal = infoPtr->MinVal;
    300318      if(temp != infoPtr->CurVal)
    301         PROGRESS_Refresh (hwnd);
     319        PROGRESS_Update (hwnd,temp);
    302320      return temp;
    303321
     
    306324      if((infoPtr->MinVal != (INT)wParam) ||
    307325         (infoPtr->MaxVal != (INT)lParam)) {
    308         infoPtr->MinVal = (INT)wParam;
    309         infoPtr->MaxVal = (INT)lParam;
    310         if(infoPtr->MaxVal <= infoPtr->MinVal)
    311           infoPtr->MaxVal = infoPtr->MinVal+1;
    312         PROGRESS_CoercePos(hwnd);
    313         PROGRESS_Refresh (hwnd);
    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
    317335    case PBM_GETRANGE:
    318336      if (lParam){
     
    324342    case PBM_GETPOS:
    325343      if (wParam || lParam)
    326         UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
     344        UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
    327345      return (infoPtr->CurVal);
    328346
    329347    case PBM_SETBARCOLOR:
    330348      if (wParam)
    331         UNKNOWN_PARAM(PBM_SETBARCOLOR, wParam, lParam);
    332       infoPtr->ColorBar = (COLORREF)lParam;     
     349        UNKNOWN_PARAM(PBM_SETBARCOLOR, wParam, lParam);
     350      infoPtr->ColorBar = (COLORREF)lParam;
    333351      PROGRESS_Refresh (hwnd);
    334352      break;
     
    336354    case PBM_SETBKCOLOR:
    337355      if (wParam)
    338         UNKNOWN_PARAM(PBM_SETBKCOLOR, wParam, lParam);
     356        UNKNOWN_PARAM(PBM_SETBKCOLOR, wParam, lParam);
    339357      infoPtr->ColorBk = (COLORREF)lParam;
    340358      PROGRESS_Refresh (hwnd);
    341359      break;
    342360
    343     default: 
    344 //      if (message >= WM_USER) 
    345 //      ERR(progress, "unknown msg %04x wp=%04x lp=%08lx\n",
    346 //                  message, wParam, lParam );
    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    }
    349367
    350368    return 0;
     
    387405{
    388406    if (GlobalFindAtomA(PROGRESS_CLASSA))
    389         UnregisterClassA(PROGRESS_CLASSA, (HINSTANCE)NULL);
    390 }
    391 
     407        UnregisterClassA(PROGRESS_CLASSA, (HINSTANCE)NULL);
     408}
     409
  • trunk/src/user32/user32.cpp

    r85 r106  
    1 /* $Id: user32.cpp,v 1.6 1999-06-09 20:53:30 phaller Exp $ */
     1/* $Id: user32.cpp,v 1.7 1999-06-12 20:44:07 cbratschi Exp $ */
    22
    33/*
     
    565565  if (y      < 0) y       = 0;
    566566#endif
     567
     568// 6-12-99 CB: WS_CLIPCHILDREN not set -> controls not redrawn
     569// Problems with group boxes
     570
     571#ifndef WS_CLIPCHILDREN
     572  #define WS_CLIPCHILDREN            0x20000000L
     573#endif
     574
     575  dwStyle |= WS_CLIPCHILDREN;
    567576
    568577//SvL: Breaks applications
     
    12891298//******************************************************************************
    12901299// Not implemented by Open32 (5-31-99 Christoph Bratschi)
    1291 // Quick and dirty implementation
    12921300//******************************************************************************
    12931301BOOL WIN32API CheckRadioButton( HWND arg1, UINT arg2, UINT arg3, UINT  arg4)
Note: See TracChangeset for help on using the changeset viewer.