Changeset 3285 for trunk/src/comctl32/treeview.cpp
- Timestamp:
- Mar 31, 2000, 4:44:25 PM (25 years ago)
- File:
-
- 1 edited
-
trunk/src/comctl32/treeview.cpp (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/comctl32/treeview.cpp
r3280 r3285 1 /* $Id: treeview.cpp,v 1. 5 2000-03-30 15:39:10cbratschi Exp $ */1 /* $Id: treeview.cpp,v 1.6 2000-03-31 14:44:25 cbratschi Exp $ */ 2 2 /* Treeview control 3 3 * … … 30 30 */ 31 31 32 /* CB: todo 32 /* CB: todo/bugs 33 - startup: missing WM_SIZE messages -> i.e. wrong info tip calculation 33 34 - bug in SetScrollInfo/ShowScrollBar: WM_SIZE and WM_NCPAINT problems (i.e. RegEdit) 34 35 - VK_LEFT in WinHlp32 displays expanded icon … … 84 85 static VOID TREEVIEW_ISearch(HWND hwnd,CHAR ch); 85 86 static VOID TREEVIEW_CheckInfoTip(HWND hwnd); 87 static VOID TREEVIEW_HideInfoTip(HWND hwnd,TREEVIEW_INFO *infoPtr); 86 88 87 89 static LRESULT CALLBACK TREEVIEW_Edit_SubclassProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); … … 1359 1361 if (infoPtr->uInternalStatus & TV_CALCALL) 1360 1362 { 1363 TREEVIEW_HideInfoTip(hwnd,infoPtr); 1361 1364 itemHeight = 0; 1362 1365 ImageList_GetIconSize (infoPtr->himlNormal, &x, &itemHeight); … … 2784 2787 infoPtr->hwndToolTip = 0; 2785 2788 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 } 2787 2793 2788 2794 if (dwStyle & TVS_CHECKBOXES) … … 3754 3760 } 3755 3761 3762 HTREEITEM 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 3756 3792 VOID TREEVIEW_ShowInfoTip(HWND hwnd,TREEVIEW_INFO *infoPtr,TREEVIEW_ITEM *item) 3757 3793 { … … 3762 3798 DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE); 3763 3799 3764 if (dwStyle & TVS_INFOTIP)3800 if (dwStyle & TVS_INFOTIP) 3765 3801 { 3766 3802 NMTVGETINFOTIPW tvgit; … … 3800 3836 ti.hinst = 0; 3801 3837 ti.lpszText = text; 3838 SendMessageA(infoPtr->hwndToolTip,TTM_TRACKACTIVATE,(WPARAM)FALSE,(LPARAM)&ti); 3802 3839 pt.x = item->text.left; 3803 3840 pt.y = item->text.top; … … 3831 3868 { 3832 3869 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) 3840 3878 TREEVIEW_HideInfoTip(hwnd,infoPtr); 3841 3879 } … … 3844 3882 { 3845 3883 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); 3870 3903 } 3904 } 3905 3906 if (dwStyle & TVS_TRACKSELECT) 3907 { 3908 //CB: todo: hottracking 3871 3909 } 3872 3910 … … 4235 4273 infoPtr->hBoldFont = CreateFontIndirectA (&logFont); 4236 4274 4275 SendMessageA(infoPtr->hwndToolTip,WM_SETFONT,infoPtr->hFont,1); 4237 4276 infoPtr->uInternalStatus |= TV_CALCALL; 4238 4277 TREEVIEW_CalcItems(hwnd,0,infoPtr); … … 4295 4334 INT scrollY = infoPtr->lefttop.y-newY; 4296 4335 4336 TREEVIEW_HideInfoTip(hwnd,infoPtr); 4297 4337 infoPtr->lefttop.y = newY; 4298 4338 if (!TREEVIEW_UnqueueRefresh(hwnd,TRUE,TRUE)) … … 4361 4401 if (lastPos != infoPtr->lefttop.x) 4362 4402 { 4403 TREEVIEW_HideInfoTip(hwnd,infoPtr); 4363 4404 if (!TREEVIEW_UnqueueRefresh(hwnd,TRUE,TRUE)) 4364 4405 TREEVIEW_CalcItems(hwnd,0,infoPtr); … … 4803 4844 } 4804 4845 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 4833 4846 static LRESULT WINAPI 4834 4847 TREEVIEW_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) … … 5024 5037 case WM_RBUTTONDBLCLK: 5025 5038 return TREEVIEW_RButtonDoubleClick(hwnd,wParam,lParam); 5026 5027 case WM_NOTIFY:5028 return TREEVIEW_Notify(hwnd,wParam,lParam);5029 5039 5030 5040 case WM_STYLECHANGED:
Note:
See TracChangeset
for help on using the changeset viewer.
