Ignore:
Timestamp:
Mar 17, 2000, 6:13:26 PM (25 years ago)
Author:
cbratschi
Message:

trackbar buddy fix, tooltip enhancements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/comctl32/trackbar.cpp

    r2875 r3145  
    1 /* $Id: trackbar.cpp,v 1.1 2000-02-23 17:09:49 cbratschi Exp $ */
     1/* $Id: trackbar.cpp,v 1.2 2000-03-17 17:13:26 cbratschi Exp $ */
    22/*
    33 * Trackbar control
     
    1818#include "winbase.h"
    1919#include "commctrl.h"
     20#include "ccbase.h"
    2021#include "trackbar.h"
    2122#include <stdio.h>
    2223
    23 #define TRACKBAR_GetInfoPtr(hwnd) ((TRACKBAR_INFO*)GetWindowLongA(hwnd,0))
     24#define TRACKBAR_GetInfoPtr(hwnd) ((TRACKBAR_INFO*)getInfoPtr(hwnd))
    2425
    2526
     
    6061#define CHANNEL_SCALE_SPACE  SCALE_SIZE+SCALE_SPACE+BORDER_SIZE
    6162#define CHANNEL_THUMB_SPACE  BORDER_SIZE
     63
     64#define TOOLTIP_SPACE 5
    6265
    6366/* scroll mode */
     
    705708
    706709    //Custom draw
    707     cdraw.hdr.hwndFrom = hwnd;
    708     cdraw.hdr.idFrom   = GetWindowLongA(hwnd,GWL_ID);
    709     cdraw.hdr.code     = NM_CUSTOMDRAW;
    710710    cdraw.dwDrawStage  = CDDS_PREPAINT;
    711711    cdraw.hdc          = hdc;
     
    715715    cdraw.lItemlParam  = 0;
    716716
    717     cdctlres = SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)cdraw.hdr.idFrom,(LPARAM)&cdraw);
     717    cdctlres = sendNotify(hwnd,NM_CUSTOMDRAW,&cdraw.hdr);
    718718
    719719    if (cdctlres & CDRF_SKIPDEFAULT) return;
     
    750750      cdraw.rc             = infoPtr->rcChannel;
    751751
    752       cdres = SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)cdraw.hdr.idFrom,(LPARAM)&cdraw);
     752      cdres = sendNotify(hwnd,NM_CUSTOMDRAW,&cdraw.hdr);
    753753    } else cdres = 0;
    754754
     
    777777        cdraw.dwDrawStage    = CDDS_ITEMPOSTPAINT;
    778778
    779         SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)cdraw.hdr.idFrom,(LPARAM)&cdraw);
     779        sendNotify(hwnd,NM_CUSTOMDRAW,&cdraw.hdr);
    780780      }
    781781    }
     
    789789      SetRectEmpty(&cdraw.rc);
    790790
    791       cdres = SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)cdraw.hdr.idFrom,(LPARAM)&cdraw);
     791      cdres = sendNotify(hwnd,NM_CUSTOMDRAW,&cdraw.hdr);
    792792    } else cdres = 0;
    793793
     
    840840        cdraw.dwDrawStage    = CDDS_ITEMPOSTPAINT;
    841841
    842         SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)cdraw.hdr.idFrom,(LPARAM)&cdraw);
     842        sendNotify(hwnd,NM_CUSTOMDRAW,&cdraw.hdr);
    843843      }
    844844    }
     
    852852      cdraw.rc             = infoPtr->rcFullThumb;
    853853
    854       cdres = SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)cdraw.hdr.idFrom,(LPARAM)&cdraw);
     854      cdres = sendNotify(hwnd,NM_CUSTOMDRAW,&cdraw.hdr);
    855855    } else cdres = 0;
    856856
     
    863863        cdraw.dwDrawStage    = CDDS_ITEMPOSTPAINT;
    864864
    865         SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)cdraw.hdr.idFrom,(LPARAM)&cdraw);
     865        sendNotify(hwnd,NM_CUSTOMDRAW,&cdraw.hdr);
    866866      }
    867867
     
    876876      GetClientRect(hwnd,&cdraw.rc);
    877877
    878       SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)cdraw.hdr.idFrom,(LPARAM)&cdraw);
     878      sendNotify(hwnd,NM_CUSTOMDRAW,&cdraw.hdr);
    879879    }
    880880
     
    977977
    978978    GetWindowRect(hwnd,&rcSelf);
     979    MapWindowPoints(HWND_DESKTOP,hwndParent,(LPPOINT)&rcSelf,2);
    979980
    980981    /* align buddy left or above */
     
    985986      if (dwStyle & TBS_VERT)
    986987      { //above
    987         x = rcSelf.left-(rcBuddy.right-rcBuddy.left)/2+infoPtr->rcChannel.left+(infoPtr->rcChannel.right-infoPtr->rcChannel.left)/2;
    988         y = rcSelf.top-(rcBuddy.bottom-rcBuddy.top);
     988        x = (infoPtr->rcChannel.right+infoPtr->rcChannel.left)/2-(rcBuddy.right-rcBuddy.left)/2+rcSelf.left;
     989        y = rcSelf.top-(rcBuddy.bottom-rcBuddy.top);
    989990      } else
    990991      { //left
    991         x = rcSelf.left+infoPtr->rcChannel.left-(rcBuddy.right-rcBuddy.left)/2;
    992         y = rcSelf.top-(rcBuddy.bottom-rcBuddy.top);
     992        x = rcSelf.left-(rcBuddy.right-rcBuddy.left);
     993        y = (infoPtr->rcChannel.bottom+infoPtr->rcChannel.top)/2-(rcBuddy.bottom-rcBuddy.top)/2+rcSelf.top;
    993994      }
    994995
     
    10041005      if (dwStyle & TBS_VERT)
    10051006      { //below
    1006         x = rcSelf.left-(rcBuddy.right-rcBuddy.left)/2+infoPtr->rcChannel.left+(infoPtr->rcChannel.right-infoPtr->rcChannel.left)/2;
    1007         y = rcSelf.bottom;
     1007        x = (infoPtr->rcChannel.right+infoPtr->rcChannel.left)/2-(rcBuddy.right-rcBuddy.left)/2+rcSelf.left;
     1008        y = rcSelf.bottom;
    10081009      } else
    1009       {
    1010         x = rcSelf.right-infoPtr->rcChannel.left-(rcBuddy.right-rcBuddy.left)/2;
    1011         y = rcSelf.top-(rcBuddy.bottom-rcBuddy.top);
     1010      { //right
     1011        x = rcSelf.right;
     1012        y = (infoPtr->rcChannel.bottom+infoPtr->rcChannel.top)/2-(rcBuddy.bottom-rcBuddy.top)/2+rcSelf.top;
    10121013      }
    10131014
     
    12271228}
    12281229
    1229 
    1230 static
    1231 TRACKBAR_GetUnicodeFormat(HWND hwnd,WPARAM wParam,LPARAM lParam)
    1232 {
    1233   return FALSE; //Unicode not used
    1234 }
    12351230
    12361231static LRESULT
     
    16751670    DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE);
    16761671
    1677     infoPtr = (TRACKBAR_INFO *)COMCTL32_Alloc(sizeof(TRACKBAR_INFO));
    1678     SetWindowLongA(hwnd,0,(DWORD)infoPtr);
     1672    infoPtr = (TRACKBAR_INFO*)initControl(hwnd,sizeof(TRACKBAR_INFO));
    16791673
    16801674    /* set default values */
     
    16911685    infoPtr->tics       = NULL;
    16921686    infoPtr->clrBk      = GetSysColor(COLOR_3DFACE);
    1693     infoPtr->hwndNotify = GetParent(hwnd);
    16941687
    16951688    infoPtr->hwndBuddyLA = 0;
     
    17111704    if (dwStyle & TBS_TOOLTIPS)
    17121705    {
    1713       TTTOOLINFOA ti;
    1714 
    1715       infoPtr->hwndToolTip =
    1716           CreateWindowExA (WS_EX_TOOLWINDOW,TOOLTIPS_CLASSA,NULL,WS_POPUP,
    1717                            CW_USEDEFAULT,CW_USEDEFAULT,
    1718                            CW_USEDEFAULT,CW_USEDEFAULT,
    1719                            hwnd,0,0,0);
    1720 
    1721       /* Send NM_TOOLTIPSCREATED notification */
    1722       if (infoPtr->hwndToolTip)
    1723       {
    1724         NMTOOLTIPSCREATED nmttc;
    1725 
    1726         nmttc.hdr.hwndFrom = hwnd;
    1727         nmttc.hdr.idFrom   = GetWindowLongA(hwnd,GWL_ID);
    1728         nmttc.hdr.code = NM_TOOLTIPSCREATED;
    1729         nmttc.hwndToolTips = infoPtr->hwndToolTip;
    1730 
    1731         SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmttc.hdr.idFrom,(LPARAM)&nmttc);
    1732       }
    1733 
    1734       ZeroMemory(&ti,sizeof(TTTOOLINFOA));
    1735       ti.cbSize   = sizeof(TTTOOLINFOA);
    1736       ti.uFlags   = TTF_TRACK | TTF_CENTERTIP | TTF_ABSOLUTE;
    1737       ti.hwnd     = hwnd;
    1738       ti.uId      = 0;
    1739       ti.lpszText = "";
    1740       SetRectEmpty(&ti.rect);
    1741 
    1742       SendMessageA(infoPtr->hwndToolTip,TTM_ADDTOOLA,0,(LPARAM)&ti);
    1743     } else infoPtr->hwndToolTip = 0;
     1706      UINT uFlags = TTF_TRACK | TTF_ABSOLUTE;
     1707
     1708      if (dwStyle & TBS_VERT)
     1709        if (infoPtr->fLocation == TBTS_RIGHT)
     1710          uFlags |= TTF_ALIGNRIGHT | TTF_VCENTER;
     1711        else
     1712          uFlags |= TTF_ALIGNLEFT | TTF_VCENTER;
     1713      else
     1714        if (infoPtr->fLocation == TBTS_TOP)
     1715          uFlags |= TTF_ALIGNTOP | TTF_HCENTER;
     1716        else
     1717          uFlags |= TTF_ALIGNBOTTOM | TTF_HCENTER;
     1718
     1719      infoPtr->hwndToolTip = createToolTip(hwnd,uFlags);
     1720    }
    17441721
    17451722    return 0;
     
    17531730
    17541731    /* delete tooltip control */
    1755     if (infoPtr->hwndToolTip) DestroyWindow(infoPtr->hwndToolTip);
     1732    destroyToolTip(infoPtr->hwndToolTip);
    17561733
    17571734    COMCTL32_Free(infoPtr->tics);
    1758     COMCTL32_Free(infoPtr);
     1735    doneControl(hwnd);
    17591736
    17601737    return 0;
     
    17671744    if (infoPtr->fLocation == TBTS_RIGHT)
    17681745    {
    1769       pt->x = infoPtr->rcFullThumb.right;
     1746      pt->x = infoPtr->rcFullThumb.right+TOOLTIP_SPACE;
    17701747      pt->y = infoPtr->rcFullThumb.top+(infoPtr->rcFullThumb.bottom-infoPtr->rcFullThumb.top)/2;
    17711748    } else
    17721749    {
    1773       pt->x = infoPtr->rcFullThumb.left-15; //CB: optimize!
     1750      pt->x = infoPtr->rcFullThumb.left-TOOLTIP_SPACE;
    17741751      pt->y = infoPtr->rcFullThumb.top+(infoPtr->rcFullThumb.bottom-infoPtr->rcFullThumb.top)/2;
    17751752    }
     
    17801757    {
    17811758      pt->x = infoPtr->rcFullThumb.left+(infoPtr->rcFullThumb.right-infoPtr->rcFullThumb.left)/2;
    1782       pt->y = infoPtr->rcFullThumb.top-15; //CB: optimize!
     1759      pt->y = infoPtr->rcFullThumb.top-TOOLTIP_SPACE;
    17831760    } else
    17841761    {
    17851762      pt->x = infoPtr->rcFullThumb.left+(infoPtr->rcFullThumb.right-infoPtr->rcFullThumb.left)/2;
    1786       pt->y = infoPtr->rcFullThumb.bottom;
     1763      pt->y = infoPtr->rcFullThumb.bottom+TOOLTIP_SPACE;
    17871764    }
    17881765  }
     
    18771854           char buf[80];
    18781855
    1879            TRACKBAR_CalcToolTipPos(hwnd,dwStyle,infoPtr,&pt);
    1880            SendMessageA(infoPtr->hwndToolTip,TTM_TRACKPOSITION,0,(LPARAM)MAKELPARAM(pt.x,pt.y));
    1881 
    18821856           ti.cbSize   = sizeof(TTTOOLINFOA);
    18831857           ti.uId      = 0;
     
    18911865
    18921866           SendMessageA(infoPtr->hwndToolTip,TTM_UPDATETIPTEXTA,0,(LPARAM)&ti);
     1867           TRACKBAR_CalcToolTipPos(hwnd,dwStyle,infoPtr,&pt);
     1868           SendMessageA(infoPtr->hwndToolTip,TTM_TRACKPOSITION,0,(LPARAM)MAKELPARAM(pt.x,pt.y));
     1869
    18931870           SendMessageA(infoPtr->hwndToolTip,TTM_TRACKACTIVATE,(WPARAM)TRUE,(LPARAM)&ti);
    18941871         }
     
    19551932      if (GetCapture() == hwnd)
    19561933      {
    1957         NMHDR nmhdr;
    1958 
    1959         nmhdr.hwndFrom = hwnd;
    1960         nmhdr.idFrom   = GetWindowLongA(hwnd,GWL_ID);
    1961         nmhdr.code     = NM_RELEASEDCAPTURE;
    1962 
    1963         SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.idFrom,(LPARAM)&nmhdr);
     1934        sendNotify(hwnd,NM_RELEASEDCAPTURE);
    19641935
    19651936        ReleaseCapture();
     
    19751946      if (GetCapture() == hwnd)
    19761947      {
    1977         NMHDR nmhdr;
    1978 
    1979         nmhdr.hwndFrom = hwnd;
    1980         nmhdr.idFrom   = GetWindowLongA(hwnd,GWL_ID);
    1981         nmhdr.code     = NM_RELEASEDCAPTURE;
    1982 
    1983         SendMessageA(GetParent(hwnd),WM_NOTIFY,(WPARAM)nmhdr.idFrom,(LPARAM)&nmhdr);
     1948        sendNotify(hwnd,NM_RELEASEDCAPTURE);
    19841949
    19851950        ReleaseCapture();
     
    21502115
    21512116
    2152 static BOOL
    2153 TRACKBAR_SendNotify (HWND hwnd, UINT code)
    2154 {
    2155 //    TRACE (trackbar, "%x\n",code);
    2156 
    2157     if (GetWindowLongA(hwnd, GWL_STYLE) & TBS_VERT)
    2158     {
    2159       return (BOOL)SendMessageA(GetParent(hwnd),WM_VSCROLL,(WPARAM)code,(LPARAM)hwnd);
    2160     } else
    2161     {
    2162       return (BOOL)SendMessageA(GetParent(hwnd),WM_HSCROLL,(WPARAM)code,(LPARAM)hwnd);
    2163     }
     2117static BOOL TRACKBAR_SendNotify (HWND hwnd, UINT code)
     2118{
     2119  if (GetWindowLongA(hwnd, GWL_STYLE) & TBS_VERT)
     2120    return sendVScroll(hwnd,code);
     2121  else
     2122    return sendHScroll(hwnd,code);
    21642123}
    21652124
     
    21722131    SHORT clickPlace;
    21732132    DOUBLE dragPos;
    2174 
    2175 //    TRACE (trackbar, "%x\n",wParam);
    21762133
    21772134    if (!(infoPtr->flags & TB_DRAG_MODE)) return TRUE;
     
    22022159      ti.uId = 0;
    22032160      ti.hinst = 0;
    2204       sprintf (buf,"%d",infoPtr->nPos);
     2161      sprintf(buf,"%d",infoPtr->nPos);
    22052162      ti.lpszText = (LPSTR)buf;
    22062163
     
    23732330        return TRACKBAR_GetToolTips (hwnd, wParam, lParam);
    23742331
    2375     case TBM_GETUNICODEFORMAT:
    2376         return TRACKBAR_GetUnicodeFormat(hwnd,wParam,lParam);
    2377 
    23782332    case TBM_SETBUDDY:
    23792333        return TRACKBAR_SetBuddy (hwnd, wParam, lParam);
     
    24792433//            ERR (trackbar, "unknown msg %04x wp=%08x lp=%08lx\n",
    24802434//                 uMsg, wParam, lParam);
    2481         return DefWindowProcA (hwnd, uMsg, wParam, lParam);
     2435        return defComCtl32ProcA (hwnd, uMsg, wParam, lParam);
    24822436    }
    24832437    return 0;
     
    24892443{
    24902444    WNDCLASSA wndClass;
    2491 
    2492 //SvL: Don't check this now
    2493 //    if (GlobalFindAtomA (TRACKBAR_CLASSA)) return;
    24942445
    24952446    ZeroMemory (&wndClass, sizeof(WNDCLASSA));
     
    25092460TRACKBAR_Unregister (VOID)
    25102461{
    2511     if (GlobalFindAtomA (TRACKBAR_CLASSA))
    2512         UnregisterClassA (TRACKBAR_CLASSA, (HINSTANCE)NULL);
    2513 }
    2514 
     2462    UnregisterClassA (TRACKBAR_CLASSA, (HINSTANCE)NULL);
     2463}
     2464
Note: See TracChangeset for help on using the changeset viewer.