Ignore:
Timestamp:
Mar 31, 2000, 4:44:25 PM (25 years ago)
Author:
cbratschi
Message:

* empty log message *

File:
1 edited

Legend:

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

    r3280 r3285  
    1 /* $Id: treeview.cpp,v 1.5 2000-03-30 15:39:10 cbratschi Exp $ */
     1/* $Id: treeview.cpp,v 1.6 2000-03-31 14:44:25 cbratschi Exp $ */
    22/* Treeview control
    33 *
     
    3030*/
    3131
    32 /* CB: todo
     32/* CB: todo/bugs
     33 - startup: missing WM_SIZE messages -> i.e. wrong info tip calculation
    3334 - bug in SetScrollInfo/ShowScrollBar: WM_SIZE and WM_NCPAINT problems (i.e. RegEdit)
    3435 - VK_LEFT in WinHlp32 displays expanded icon
     
    8485static VOID    TREEVIEW_ISearch(HWND hwnd,CHAR ch);
    8586static VOID    TREEVIEW_CheckInfoTip(HWND hwnd);
     87static VOID TREEVIEW_HideInfoTip(HWND hwnd,TREEVIEW_INFO *infoPtr);
    8688
    8789static LRESULT CALLBACK TREEVIEW_Edit_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
     
    13591361  if (infoPtr->uInternalStatus & TV_CALCALL)
    13601362  {
     1363    TREEVIEW_HideInfoTip(hwnd,infoPtr);
    13611364    itemHeight = 0;
    13621365    ImageList_GetIconSize (infoPtr->himlNormal, &x, &itemHeight);
     
    27842787  infoPtr->hwndToolTip = 0;
    27852788  if (!(dwStyle & TVS_NOTOOLTIPS))
    2786     infoPtr->hwndToolTip = createToolTip(hwnd,TTF_TRACK | TTF_ABSOLUTE,TRUE);
     2789  {
     2790    infoPtr->hwndToolTip = createToolTip(hwnd,TTF_TRACK | TTF_ABSOLUTE | TTF_TRANSPARENT,TRUE);
     2791    SendMessageA(infoPtr->hwndToolTip,WM_SETFONT,infoPtr->hFont,0);
     2792  }
    27872793
    27882794  if (dwStyle & TVS_CHECKBOXES)
     
    37543760}
    37553761
     3762HTREEITEM TREEVIEW_GetInfoTipItem(HWND hwnd,TREEVIEW_INFO *infoPtr,POINT pt)
     3763{
     3764  TVHITTESTINFO ht;
     3765
     3766  ht.pt = pt;
     3767  TREEVIEW_HitTest(hwnd,&ht,FALSE);
     3768
     3769  if (ht.hItem && (ht.flags & TVHT_ONITEM))
     3770  {
     3771    TREEVIEW_ITEM *item;
     3772
     3773    item = &infoPtr->items[(INT)ht.hItem];
     3774    if (item->visible && ((item->text.left < 0) || (item->text.right > infoPtr->uVisibleWidth)))
     3775      return ht.hItem;
     3776  }
     3777
     3778  //check tool rect -> no flickering on tip frame
     3779  if (infoPtr->tipItem)
     3780  {
     3781    POINT pt2 = pt;
     3782    RECT rect;
     3783
     3784    GetWindowRect(infoPtr->hwndToolTip,&rect);
     3785    ClientToScreen(hwnd,&pt2);
     3786    return PtInRect(&rect,pt2) ? infoPtr->tipItem:0;
     3787  }
     3788
     3789  return 0;
     3790}
     3791
    37563792VOID TREEVIEW_ShowInfoTip(HWND hwnd,TREEVIEW_INFO *infoPtr,TREEVIEW_ITEM *item)
    37573793{
     
    37623798  DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE);
    37633799
    3764   if(dwStyle & TVS_INFOTIP)
     3800  if (dwStyle & TVS_INFOTIP)
    37653801  {
    37663802    NMTVGETINFOTIPW tvgit;
     
    38003836  ti.hinst    = 0;
    38013837  ti.lpszText = text;
     3838  SendMessageA(infoPtr->hwndToolTip,TTM_TRACKACTIVATE,(WPARAM)FALSE,(LPARAM)&ti);
    38023839  pt.x = item->text.left;
    38033840  pt.y = item->text.top;
     
    38313868{
    38323869  TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(hwnd);
    3833   TVHITTESTINFO ht;
    3834 
    3835   GetCursorPos(&ht.pt);
    3836   ScreenToClient(hwnd,&ht.pt);
    3837   TREEVIEW_HitTest(hwnd,&ht,TRUE);
    3838 
    3839   if ((ht.hItem != infoPtr->tipItem) || !(ht.flags & TVHT_ONITEMLABEL))
     3870  HTREEITEM hItem;
     3871  POINT pt;
     3872
     3873  GetCursorPos(&pt);
     3874  ScreenToClient(hwnd,&pt);
     3875  hItem = TREEVIEW_GetInfoTipItem(hwnd,infoPtr,pt);
     3876
     3877  if (hItem != infoPtr->tipItem)
    38403878    TREEVIEW_HideInfoTip(hwnd,infoPtr);
    38413879}
     
    38443882{
    38453883  TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(hwnd);
    3846   TVHITTESTINFO ht;
    3847   TREEVIEW_ITEM *item;
    3848 
    3849   ht.pt.x = (INT)LOWORD(lParam);
    3850   ht.pt.y = (INT)HIWORD(lParam);
    3851 
    3852   TREEVIEW_HitTest(hwnd,&ht,FALSE);
    3853 
    3854   if (ht.hItem)
    3855   {
    3856     DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE);
    3857 
    3858     item = &infoPtr->items[(INT)ht.hItem];
    3859 
    3860     if (infoPtr->hwndToolTip && (ht.flags & TVHT_ONITEMLABEL) &&
    3861         ((item->text.left < 0) || (item->text.right > infoPtr->uVisibleWidth) || (item->text.top < 0) || (item->text.bottom > infoPtr->uVisibleHeight)) &&
    3862         (infoPtr->tipItem != item->hItem))
    3863       TREEVIEW_ShowInfoTip(hwnd,infoPtr,item);
    3864     else
    3865       TREEVIEW_HideInfoTip(hwnd,infoPtr);
    3866 
    3867     if (dwStyle & TVS_TRACKSELECT)
    3868     {
    3869       //CB: todo: hottracking
     3884  DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE);
     3885  POINT pt;
     3886
     3887  pt.x = (INT)LOWORD(lParam);
     3888  pt.y = (INT)HIWORD(lParam);
     3889
     3890  if (infoPtr->hwndToolTip)
     3891  {
     3892    HTREEITEM hItem = TREEVIEW_GetInfoTipItem(hwnd,infoPtr,pt);
     3893
     3894    if (infoPtr->tipItem != hItem)
     3895    {
     3896      if (hItem)
     3897      {
     3898        TREEVIEW_ITEM *item;
     3899
     3900        item = &infoPtr->items[(INT)hItem];
     3901        TREEVIEW_ShowInfoTip(hwnd,infoPtr,item);
     3902      } else TREEVIEW_HideInfoTip(hwnd,infoPtr);
    38703903    }
     3904  }
     3905
     3906  if (dwStyle & TVS_TRACKSELECT)
     3907  {
     3908    //CB: todo: hottracking
    38713909  }
    38723910
     
    42354273  infoPtr->hBoldFont = CreateFontIndirectA (&logFont);
    42364274
     4275  SendMessageA(infoPtr->hwndToolTip,WM_SETFONT,infoPtr->hFont,1);
    42374276  infoPtr->uInternalStatus |= TV_CALCALL;
    42384277  TREEVIEW_CalcItems(hwnd,0,infoPtr);
     
    42954334    INT scrollY = infoPtr->lefttop.y-newY;
    42964335
     4336    TREEVIEW_HideInfoTip(hwnd,infoPtr);
    42974337    infoPtr->lefttop.y = newY;
    42984338    if (!TREEVIEW_UnqueueRefresh(hwnd,TRUE,TRUE))
     
    43614401  if (lastPos != infoPtr->lefttop.x)
    43624402  {
     4403    TREEVIEW_HideInfoTip(hwnd,infoPtr);
    43634404    if (!TREEVIEW_UnqueueRefresh(hwnd,TRUE,TRUE))
    43644405      TREEVIEW_CalcItems(hwnd,0,infoPtr);
     
    48034844}
    48044845
    4805 static LRESULT TREEVIEW_Notify(HWND hwnd,WPARAM wParam,LPARAM lParam)
    4806 {
    4807   TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(hwnd);
    4808   LPNMHDR hdr = (LPNMHDR)lParam;
    4809 
    4810   if (hdr->hwndFrom == infoPtr->hwndToolTip)
    4811   {
    4812     LPARAM lp = (LPARAM)GetMessagePos();
    4813     POINT pt;
    4814 
    4815     pt.x = (INT)LOWORD(lp);
    4816     pt.y = (INT)HIWORD(lp);
    4817     ScreenToClient(hwnd,&pt);
    4818     lp = MAKELONG(pt.x,pt.y);
    4819 
    4820     if (hdr->code == (UINT)NM_CLICK)
    4821       TREEVIEW_LButtonDown(hwnd,0,lp);
    4822     else if (hdr->code == (UINT)NM_RCLICK)
    4823       TREEVIEW_RButtonDown(hwnd,0,lp);
    4824     else if (hdr->code == (UINT)NM_DBLCLK)
    4825       TREEVIEW_LButtonDoubleClick(hwnd,0,lp);
    4826     else if (hdr->code == (UINT)NM_RDBLCLK)
    4827       TREEVIEW_RButtonDoubleClick(hwnd,0,lp);
    4828   }
    4829 
    4830   return 0;
    4831 }
    4832 
    48334846static LRESULT WINAPI
    48344847TREEVIEW_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
     
    50245037        case WM_RBUTTONDBLCLK:
    50255038          return TREEVIEW_RButtonDoubleClick(hwnd,wParam,lParam);
    5026 
    5027         case WM_NOTIFY:
    5028           return TREEVIEW_Notify(hwnd,wParam,lParam);
    50295039
    50305040        case WM_STYLECHANGED:
Note: See TracChangeset for help on using the changeset viewer.