From 6131814bc90be94feb1eabeb41be845f55082e02 Mon Sep 17 00:00:00 2001 From: qianxj2004 <qianxj15@sina.com> Date: 星期一, 09 六月 2025 17:31:49 +0800 Subject: [PATCH] update --- jrj/xframe/xcontrol/xtreeview.hpp | 1076 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 538 insertions(+), 538 deletions(-) diff --git a/jrj/xframe/xcontrol/xtreeview.hpp b/jrj/xframe/xcontrol/xtreeview.hpp index 715eda7..6ee1556 100644 --- a/jrj/xframe/xcontrol/xtreeview.hpp +++ b/jrj/xframe/xcontrol/xtreeview.hpp @@ -1,539 +1,539 @@ -#pragma once - -#include "wobject/xcontrol.hpp" -#include "win32/win.hpp" - -typedef struct _TREEITEM{} *HTREEITEM; - -#define TVI_ROOT ((HTREEITEM)(ULONG_PTR)-0x10000) -#define TVI_FIRST ((HTREEITEM)(ULONG_PTR)-0x0FFFF) -#define TVI_LAST ((HTREEITEM)(ULONG_PTR)-0x0FFFE) -#define TVI_SORT ((HTREEITEM)(ULONG_PTR)-0x0FFFD) - -#define TVIF_TEXT 0x0001 -#define TVIF_IMAGE 0x0002 -#define TVIF_PARAM 0x0004 -#define TVIF_STATE 0x0008 -#define TVIF_HANDLE 0x0010 -#define TVIF_SELECTEDIMAGE 0x0020 -#define TVIF_CHILDREN 0x0040 -#define TVIF_INTEGRAL 0x0080 - -#define TVIF_STATEEX 0x0100 -#define TVIF_EXPANDEDIMAGE 0x0200 - -#define TVIS_SELECTED 0x0002 -#define TVIS_CUT 0x0004 -#define TVIS_DROPHILITED 0x0008 -#define TVIS_BOLD 0x0010 -#define TVIS_EXPANDED 0x0020 -#define TVIS_EXPANDEDONCE 0x0040 -#define TVIS_EXPANDPARTIAL 0x0080 - -#define TVIS_OVERLAYMASK 0x0F00 -#define TVIS_STATEIMAGEMASK 0xF000 -#define TVIS_USERMASK 0xF000 - -#define TVGN_ROOT 0x0000 -#define TVGN_NEXT 0x0001 -#define TVGN_PREVIOUS 0x0002 -#define TVGN_PARENT 0x0003 -#define TVGN_CHILD 0x0004 -#define TVGN_FIRSTVISIBLE 0x0005 -#define TVGN_NEXTVISIBLE 0x0006 -#define TVGN_PREVIOUSVISIBLE 0x0007 -#define TVGN_DROPHILITE 0x0008 -#define TVGN_CARET 0x0009 -#define TVGN_LASTVISIBLE 0x000A -#define TVGN_NEXTSELECTED 0x000B - - #define TV_FIRST 0x1100 - -#ifdef XWIN -struct SCROLLINFO -{ - int cbSize; - int fMask; - int nMin; - int nMax; - int nPage; - int nPos; - int nTrackPos; -}; -#endif - - -struct tvitem -{ - int mask; - HTREEITEM hItem; - int state; - int stateMask; - string pszText; - int cchTextMax; - int iImage; - int iSelectedImage; - int cChildren; - LPARAM lParam; -}; - -struct tvinsertstruct -{ - HTREEITEM hParent; - HTREEITEM hInsertAfter; - tvitem item; -}; - - -struct NMTREEVIEW : public NMHDR -{ - int action; - tvitem itemOld; - tvitem itemNew; - xpoint ptDrag; -}; - - -struct TVNNMHDR : public NMHDR -{ - HTREEITEM FromItem; - HTREEITEM ToItem; - xpoint pt; - string PopupMenu; -}; - -struct NMTVDISPINFO : public NMHDR -{ - tvitem item; -}; - -struct TVHITTESTINFO { - xpoint pt; - int flags; - HTREEITEM hItem; -}; - -class xtreeview: public xcontrol -{ -public: - xtreeview() :xcontrol(nullptr) {} - xtreeview(void* implptr) :xcontrol(implptr) {} -public: - HTREEITEM GetSelectedItem() - { - int TVM_GETNEXTITEM = TV_FIRST + 10; - - return (HTREEITEM)SendMessage(GetHWND(), TVM_GETNEXTITEM, TVGN_CARET,0); - } - - xstring GetItemLabel(HTREEITEM hItem) - { - int TVM_GETITEM = TV_FIRST + 62; - - tvitem tvi ; - tvi.hItem = hItem; - tvi.mask = TVIF_TEXT; - - wchar_t buf[255]=L""; - tvi.pszText = buf; - tvi.cchTextMax = 255; - SendMessage(GetHWND(), TVM_GETITEM, 0,(LPARAM)&tvi); - return tvi.pszText; - } - - int SetItemLabel(HTREEITEM hItem,string label) - { - int TVM_SETITEM = TV_FIRST + 63; - - tvitem tvi ; - tvi.hItem = hItem; - tvi.mask = TVIF_TEXT; - tvi.pszText = label; - tvi.cchTextMax =9999;//label.length()+ 1; - - SendMessage(GetHWND(), TVM_SETITEM, 0,(LPARAM)&tvi); - return 1; - } - - LPARAM GetItemData(HTREEITEM hItem) - { - int TVM_GETITEM = TV_FIRST + 62; - - //ref tvitem tvi =new tvitem; - tvitem tvi; - tvi.hItem = hItem; - - wchar_t buf[255]; - tvi.pszText = buf; - tvi.cchTextMax = 255; - tvi.mask = TVIF_PARAM|TVIF_TEXT; - - SendMessage(GetHWND(), TVM_GETITEM, 0,(LPARAM)&tvi); - return tvi.lParam; - } - - int SetItemData(HTREEITEM hItem, KXMLDOMElement value) - { - return SetItemData(hItem, (LPARAM)value.ptr()); - } - - int SetItemData(HTREEITEM hItem,LPARAM value) - { - int TVM_SETITEM = TV_FIRST + 63; - - tvitem tvi ; - tvi.hItem = hItem; - tvi.mask = TVIF_PARAM; - tvi.lParam = value; - - SendMessage(GetHWND(), TVM_SETITEM, 0,(LPARAM)&tvi); - return 1; - } - - int DeleteItem( HTREEITEM hItem) - { - int TVM_DELETEITEM = TV_FIRST + 1; - - SendMessage(GetHWND(), TVM_DELETEITEM, 0,(LPARAM)hItem); - return 1; - } - - int ExpandItem(HTREEITEM hItem) - { - int TVE_COLLAPSE = 0x0001; - int TVE_EXPAND = 0x0002; - int TVE_TOGGLE = 0x0003; - int TVE_EXPANDPARTIAL = 0x4000; - int TVE_COLLAPSERESET = 0x8000; - - int TVM_EXPAND = TV_FIRST + 2; - - SendMessage(GetHWND(), TVM_EXPAND, TVE_EXPAND|TVE_EXPANDPARTIAL ,(LPARAM)hItem); - return 1; - } - - int ExpandItem(HTREEITEM hItem, int flag) - { - int TVM_EXPAND = TV_FIRST + 2; - - return SendMessage(GetHWND(), TVM_EXPAND, (WPARAM)flag ,(LPARAM)hItem); - } - - HTREEITEM GetItem(HTREEITEM hItem,int code) - { - int TVM_GETNEXTITEM = TV_FIRST + 10 ; - return (HTREEITEM)SendMessage(GetHWND(), TVM_GETNEXTITEM, code,(LPARAM)hItem); - } - - HTREEITEM GetRootItem() - { - return GetItem(NULL,TVGN_ROOT); - } - HTREEITEM GetNextItem(HTREEITEM hItem) - { - return GetItem(hItem,TVGN_NEXT); - } - HTREEITEM GetPrevItem(HTREEITEM hItem) - { - return GetItem(hItem,TVGN_PREVIOUS ); - } - HTREEITEM GetParentItem(HTREEITEM hItem) - { - return GetItem(hItem,TVGN_PARENT ); - } - HTREEITEM GetChildItem(HTREEITEM hItem) - { - return GetItem(hItem,TVGN_CHILD ); - } - - HTREEITEM GetFirstVisibleItem(HTREEITEM hItem) - { - return GetItem(hItem,TVGN_FIRSTVISIBLE ); - } - HTREEITEM GetNextVisibleItem(HTREEITEM hItem) - { - return GetItem(hItem,TVGN_NEXTVISIBLE ); - } - HTREEITEM GetPrevVisibleItem(HTREEITEM hItem) - { - return GetItem(hItem,TVGN_PREVIOUSVISIBLE ); - } - HTREEITEM GetDropHiliteItem(HTREEITEM hItem) - { - return GetItem(hItem,TVGN_DROPHILITE ); - } - - HTREEITEM GetCaretItem() - { - return GetItem(NULL,TVGN_CARET ); - } - HTREEITEM GetLastVisibleItem(HTREEITEM hItem) - { - return GetItem(hItem,TVGN_LASTVISIBLE ); - } - - int ExpandItemEx(HTREEITEM hItem) - { - int TVE_EXPAND = 0x2; - int TVM_EXPAND = 0x1102; - return SendMessage(GetHWND(),TVM_EXPAND,TVE_EXPAND,(LPARAM)hItem); - } - int CloseItemEx(HTREEITEM hItem) - { - int TVE_COLLAPSE = 0x1; - int TVM_EXPAND = 0x1102; - return SendMessage(GetHWND(),TVM_EXPAND,TVE_COLLAPSE,(LPARAM)hItem); - } - - int ExpandItemAll(HTREEITEM hItem) - { - ExpandItemEx(hItem); - HTREEITEM hcItem =GetChildItem(hItem); - if(hcItem) - { - ExpandItemAll(hcItem); - while(GetNextItem(hcItem)) - { - hcItem = GetNextItem(hcItem); - ExpandItemAll(hcItem); - } - } - return 1; - } - - HTREEITEM InsertItem(HTREEITEM hItem,HTREEITEM hBeforeItem, string label,LPARAM data,int image = 0) - { - int TVM_INSERTITEM = TV_FIRST + 50; - tvinsertstruct tvis; - tvis.item.mask = TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT|TVIF_HANDLE; - tvis.item.pszText = label; - tvis.item.cchTextMax = 255; - tvis.item.lParam = data; - tvis.item.iImage = image; - tvis.item.iSelectedImage = image; - - tvis.hParent = hItem; - HTREEITEM hItemAfter = 0; - if(hBeforeItem) - { - hItemAfter = GetItem(hBeforeItem,TVGN_PREVIOUS ); - } - if(hItemAfter ==0) hItemAfter = TVI_FIRST; - tvis.hInsertAfter = hItemAfter; - - HTREEITEM h; - h = (HTREEITEM)SendMessage(GetHWND(), TVM_INSERTITEM, 0,(LPARAM)&tvis); - return h; - } - - HTREEITEM InsertItem(HTREEITEM hBeforeItem, string label,LPARAM data,int image = 0) - { - //int TVI_ROOT = 0 - 65536; - HTREEITEM hItem= GetParentItem(hBeforeItem); - if(hItem==0) hItem = TVI_ROOT; - return InsertItem(hItem, hBeforeItem,label,data,image); - } - - HTREEITEM InsertItem(string label,LPARAM data,int image = 0) - { - HTREEITEM hBeforeItem = GetCaretItem(); - return InsertItem(hBeforeItem,label,data,image); - } - - int SetItemChild1(HTREEITEM hItem, int cchild) - { - return SetItemChild(hItem, cchild); - } - - int SetItemChild(HTREEITEM hItem, int cchild) - { - int TVM_SETITEM = TV_FIRST + 63; - - tvitem tvi; - tvi.hItem = hItem; - tvi.mask = TVIF_CHILDREN|TVIF_HANDLE ; - tvi.cChildren = cchild; - SendMessage(GetHWND(), TVM_SETITEM, 0,(LPARAM)&tvi); - return 1; - } - - HTREEITEM InsertChildItem(HTREEITEM hItem, string label, KXMLDOMElement ele, int image = 0) - { - return InsertChildItem(hItem, label, ele.ptr(), image); - } - - HTREEITEM InsertChildItem(HTREEITEM hItem,string label,LPARAM data,int image = 0) - { - HTREEITEM h; - int TVM_INSERTITEM = TV_FIRST + 50; - int TVM_SETITEM = TV_FIRST + 63; - - tvinsertstruct tvis; - tvis.item.mask = TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT; - tvis.item.pszText = label; - tvis.item.cchTextMax = 255; - tvis.item.lParam = data; - tvis.item.iImage = image; - tvis.item.iSelectedImage = image; - - tvis.hParent = hItem; - tvis.hInsertAfter = TVI_LAST; - - h = (HTREEITEM)SendMessage(GetHWND(), TVM_INSERTITEM, 0,(LPARAM)&tvis); - - tvitem tvi; - tvi.hItem = hItem; - tvi.mask = TVIF_CHILDREN|TVIF_HANDLE ; - tvi.cChildren = 1; - SendMessage(GetHWND(), TVM_SETITEM, 0,(LPARAM)&tvi); - - return h; - } - - HTREEITEM InsertChildItemEx(HTREEITEM hItem, string label, KXMLDOMElement ele, int image = 0, int image2 = 0) - { - return InsertChildItemEx(hItem, label, ele.ptr(), image,image2); - } - - HTREEITEM InsertChildItemEx(HTREEITEM hItem,string label,LPARAM data,int image = 0,int image2 = 0) - { - int TVM_INSERTITEM = TV_FIRST + 50; - - tvinsertstruct tvis; - tvis.hParent = hItem; - tvis.hInsertAfter = TVI_LAST; - - tvis.item.mask = TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT; - tvis.item.pszText = label; - tvis.item.cchTextMax = 255; - tvis.item.lParam = data; - tvis.item.iImage = image; - tvis.item.iSelectedImage = image2; - - //LPTV_INSERTSTRUCT lpis; - HTREEITEM h; - h = (HTREEITEM)SendMessage(GetHWND(), TVM_INSERTITEM, 0, (LPARAM)&tvis); - return h; - } - - int GetChecked(HTREEITEM hItem) - { - int TVM_GETITEMA = (TV_FIRST + 12); - int TVM_GETITEMW = (TV_FIRST + 62); - - tvitem xitem; - xitem.mask = TVIF_STATE | TVIF_HANDLE | TVIF_CHILDREN; - xitem.stateMask = TVIS_STATEIMAGEMASK; - xitem.hItem = hItem; - - SendMessage(GetHWND(), TVM_GETITEMW, 0, (LPARAM)&xitem); - int s = xitem.state; - //trace("%d=%d", s, s / 4096); - if ((s / 4096) > 1) //4096=2^12 鎵撳嬀 - return 1; - else - return 0; - } - - int SetChecked(HTREEITEM hItem, int check) - { - int TVM_SETITEMA = (TV_FIRST + 13); - int TVM_SETITEMW = (TV_FIRST + 63); - int TVM_GETITEMW = (TV_FIRST + 62); - - tvitem xitem; - xitem.mask = TVIF_STATE | TVIF_HANDLE | TVIF_CHILDREN | TVIF_IMAGE | TVIF_PARAM; - xitem.stateMask = TVIS_STATEIMAGEMASK; - xitem.hItem = hItem; - SendMessage(GetHWND(), TVM_GETITEMW, 0, (LPARAM)&xitem); - if (check == 1) //鎵撳嬀 - xitem.state = 4096 * 2; //INDEXTOSTATEIMAGEMASK(2); - else - xitem.state = 4096; //INDEXTOSTATEIMAGEMASK(1); - - return SendMessage(GetHWND(), TVM_SETITEMW, 0, (LPARAM)&xitem); - } - - HTREEITEM ItemFocus(HTREEITEM hItem) - { - int TVM_SELECTITEM = 0x110b; - return (HTREEITEM)SendMessage(GetHWND(),TVM_SELECTITEM,TVGN_CARET,(LPARAM)hItem); - } - - int ItemEdit(HTREEITEM hItem) - { - ItemFocus(hItem); - int TVM_EDITLABEL = (TV_FIRST + 65) ; - //int TVM_EDITLABEL = (TV_FIRST + 14) ; - return SendMessage(GetHWND(), TVM_EDITLABEL, 0, (LPARAM)hItem); - } - - int GetItemImage(HTREEITEM hItem) - { - int TVM_GETITEMA = (TV_FIRST + 12); - int TVM_GETITEMW = (TV_FIRST + 62); - - tvitem xitem; - xitem.mask = TVIF_IMAGE; - xitem.stateMask = TVIS_STATEIMAGEMASK; - xitem.hItem = hItem; - SendMessage(GetHWND(), TVM_GETITEMW, 0, (LPARAM)&xitem); - return xitem.iImage; - } - - int SetItemImage(HTREEITEM hItem, int image) - { - int TVM_GETITEMA = (TV_FIRST + 12); - int TVM_GETITEMW = (TV_FIRST + 62); - int TVM_SETITEMW = (TV_FIRST + 63); - - tvitem xitem; - xitem.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE; - xitem.stateMask = TVIS_STATEIMAGEMASK; - xitem.hItem = hItem; - xitem.iImage = image; - xitem.iSelectedImage = image; - SendMessage(GetHWND(), TVM_SETITEMW, 0, (LPARAM)&xitem); - return 1; - } - - int GetItemChild1(HTREEITEM hItem) - { - return GetItemChild(hItem); - } - - int GetItemChild(HTREEITEM hItem) - { - int TVM_GETITEMW = (TV_FIRST + 62); - - tvitem xitem; - xitem.hItem = hItem; - xitem.mask = TVIF_CHILDREN|TVIF_HANDLE ; - xitem.stateMask = TVIS_STATEIMAGEMASK; - SendMessage(GetHWND(), TVM_GETITEMW, 0,(LPARAM)&xitem); - return xitem.cChildren; - } - - xstring PopupMenu(string str) - { - return (string)SendMessage(GetHWND(), 0x402, (WPARAM)str, 0); - } - - string PopupMenu(KXMLDOMElement e) - { - return PopupMenu(e.xml()); - } - - void SetLineAtRoot(bool value) - { - - int GWL_STYLE_ = -16; - int TVS_LINESATROOT_ = 0x0004; - int style = GetWindowLong(GetHWND(), GWL_STYLE_); - if (value) - SetWindowLong(GetHWND(), GWL_STYLE_, style | TVS_LINESATROOT_); - else - SetWindowLong(GetHWND(), GWL_STYLE_, style & ~TVS_LINESATROOT_); - } - +#pragma once + +#include "wobject/xcontrol.hpp" +#include "win32/win.hpp" + +typedef struct _TREEITEM{} *HTREEITEM; + +#define TVI_ROOT ((HTREEITEM)(ULONG_PTR)-0x10000) +#define TVI_FIRST ((HTREEITEM)(ULONG_PTR)-0x0FFFF) +#define TVI_LAST ((HTREEITEM)(ULONG_PTR)-0x0FFFE) +#define TVI_SORT ((HTREEITEM)(ULONG_PTR)-0x0FFFD) + +#define TVIF_TEXT 0x0001 +#define TVIF_IMAGE 0x0002 +#define TVIF_PARAM 0x0004 +#define TVIF_STATE 0x0008 +#define TVIF_HANDLE 0x0010 +#define TVIF_SELECTEDIMAGE 0x0020 +#define TVIF_CHILDREN 0x0040 +#define TVIF_INTEGRAL 0x0080 + +#define TVIF_STATEEX 0x0100 +#define TVIF_EXPANDEDIMAGE 0x0200 + +#define TVIS_SELECTED 0x0002 +#define TVIS_CUT 0x0004 +#define TVIS_DROPHILITED 0x0008 +#define TVIS_BOLD 0x0010 +#define TVIS_EXPANDED 0x0020 +#define TVIS_EXPANDEDONCE 0x0040 +#define TVIS_EXPANDPARTIAL 0x0080 + +#define TVIS_OVERLAYMASK 0x0F00 +#define TVIS_STATEIMAGEMASK 0xF000 +#define TVIS_USERMASK 0xF000 + +#define TVGN_ROOT 0x0000 +#define TVGN_NEXT 0x0001 +#define TVGN_PREVIOUS 0x0002 +#define TVGN_PARENT 0x0003 +#define TVGN_CHILD 0x0004 +#define TVGN_FIRSTVISIBLE 0x0005 +#define TVGN_NEXTVISIBLE 0x0006 +#define TVGN_PREVIOUSVISIBLE 0x0007 +#define TVGN_DROPHILITE 0x0008 +#define TVGN_CARET 0x0009 +#define TVGN_LASTVISIBLE 0x000A +#define TVGN_NEXTSELECTED 0x000B + + #define TV_FIRST 0x1100 + +#ifdef XWIN +struct SCROLLINFO +{ + int cbSize; + int fMask; + int nMin; + int nMax; + int nPage; + int nPos; + int nTrackPos; +}; +#endif + + +struct tvitem +{ + int mask; + HTREEITEM hItem; + int state; + int stateMask; + string pszText; + int cchTextMax; + int iImage; + int iSelectedImage; + int cChildren; + LPARAM lParam; +}; + +struct tvinsertstruct +{ + HTREEITEM hParent; + HTREEITEM hInsertAfter; + tvitem item; +}; + + +struct NMTREEVIEW : public NMHDR +{ + int action; + tvitem itemOld; + tvitem itemNew; + xpoint ptDrag; +}; + + +struct TVNNMHDR : public NMHDR +{ + HTREEITEM FromItem; + HTREEITEM ToItem; + xpoint pt; + string PopupMenu; +}; + +struct NMTVDISPINFO : public NMHDR +{ + tvitem item; +}; + +struct TVHITTESTINFO { + xpoint pt; + int flags; + HTREEITEM hItem; +}; + +class xtreeview: public xcontrol +{ +public: + xtreeview() :xcontrol(nullptr) {} + xtreeview(void* implptr) :xcontrol(implptr) {} +public: + HTREEITEM GetSelectedItem() + { + int TVM_GETNEXTITEM = TV_FIRST + 10; + + return (HTREEITEM)SendMessage(GetHWND(), TVM_GETNEXTITEM, TVGN_CARET,0); + } + + xstring GetItemLabel(HTREEITEM hItem) + { + int TVM_GETITEM = TV_FIRST + 62; + + tvitem tvi ; + tvi.hItem = hItem; + tvi.mask = TVIF_TEXT; + + wchar_t buf[255]=L""; + tvi.pszText = buf; + tvi.cchTextMax = 255; + SendMessage(GetHWND(), TVM_GETITEM, 0,(LPARAM)&tvi); + return tvi.pszText; + } + + int SetItemLabel(HTREEITEM hItem,string label) + { + int TVM_SETITEM = TV_FIRST + 63; + + tvitem tvi ; + tvi.hItem = hItem; + tvi.mask = TVIF_TEXT; + tvi.pszText = label; + tvi.cchTextMax =9999;//label.length()+ 1; + + SendMessage(GetHWND(), TVM_SETITEM, 0,(LPARAM)&tvi); + return 1; + } + + LPARAM GetItemData(HTREEITEM hItem) + { + int TVM_GETITEM = TV_FIRST + 62; + + //ref tvitem tvi =new tvitem; + tvitem tvi; + tvi.hItem = hItem; + + wchar_t buf[255]; + tvi.pszText = buf; + tvi.cchTextMax = 255; + tvi.mask = TVIF_PARAM|TVIF_TEXT; + + SendMessage(GetHWND(), TVM_GETITEM, 0,(LPARAM)&tvi); + return tvi.lParam; + } + + int SetItemData(HTREEITEM hItem, KXMLDOMElement value) + { + return SetItemData(hItem, (LPARAM)value.ptr()); + } + + int SetItemData(HTREEITEM hItem,LPARAM value) + { + int TVM_SETITEM = TV_FIRST + 63; + + tvitem tvi ; + tvi.hItem = hItem; + tvi.mask = TVIF_PARAM; + tvi.lParam = value; + + SendMessage(GetHWND(), TVM_SETITEM, 0,(LPARAM)&tvi); + return 1; + } + + int DeleteItem( HTREEITEM hItem) + { + int TVM_DELETEITEM = TV_FIRST + 1; + + SendMessage(GetHWND(), TVM_DELETEITEM, 0,(LPARAM)hItem); + return 1; + } + + int ExpandItem(HTREEITEM hItem) + { + int TVE_COLLAPSE = 0x0001; + int TVE_EXPAND = 0x0002; + int TVE_TOGGLE = 0x0003; + int TVE_EXPANDPARTIAL = 0x4000; + int TVE_COLLAPSERESET = 0x8000; + + int TVM_EXPAND = TV_FIRST + 2; + + SendMessage(GetHWND(), TVM_EXPAND, TVE_EXPAND|TVE_EXPANDPARTIAL ,(LPARAM)hItem); + return 1; + } + + int ExpandItem(HTREEITEM hItem, int flag) + { + int TVM_EXPAND = TV_FIRST + 2; + + return SendMessage(GetHWND(), TVM_EXPAND, (WPARAM)flag ,(LPARAM)hItem); + } + + HTREEITEM GetItem(HTREEITEM hItem,int code) + { + int TVM_GETNEXTITEM = TV_FIRST + 10 ; + return (HTREEITEM)SendMessage(GetHWND(), TVM_GETNEXTITEM, code,(LPARAM)hItem); + } + + HTREEITEM GetRootItem() + { + return GetItem(NULL,TVGN_ROOT); + } + HTREEITEM GetNextItem(HTREEITEM hItem) + { + return GetItem(hItem,TVGN_NEXT); + } + HTREEITEM GetPrevItem(HTREEITEM hItem) + { + return GetItem(hItem,TVGN_PREVIOUS ); + } + HTREEITEM GetParentItem(HTREEITEM hItem) + { + return GetItem(hItem,TVGN_PARENT ); + } + HTREEITEM GetChildItem(HTREEITEM hItem) + { + return GetItem(hItem,TVGN_CHILD ); + } + + HTREEITEM GetFirstVisibleItem(HTREEITEM hItem) + { + return GetItem(hItem,TVGN_FIRSTVISIBLE ); + } + HTREEITEM GetNextVisibleItem(HTREEITEM hItem) + { + return GetItem(hItem,TVGN_NEXTVISIBLE ); + } + HTREEITEM GetPrevVisibleItem(HTREEITEM hItem) + { + return GetItem(hItem,TVGN_PREVIOUSVISIBLE ); + } + HTREEITEM GetDropHiliteItem(HTREEITEM hItem) + { + return GetItem(hItem,TVGN_DROPHILITE ); + } + + HTREEITEM GetCaretItem() + { + return GetItem(NULL,TVGN_CARET ); + } + HTREEITEM GetLastVisibleItem(HTREEITEM hItem) + { + return GetItem(hItem,TVGN_LASTVISIBLE ); + } + + int ExpandItemEx(HTREEITEM hItem) + { + int TVE_EXPAND = 0x2; + int TVM_EXPAND = 0x1102; + return SendMessage(GetHWND(),TVM_EXPAND,TVE_EXPAND,(LPARAM)hItem); + } + int CloseItemEx(HTREEITEM hItem) + { + int TVE_COLLAPSE = 0x1; + int TVM_EXPAND = 0x1102; + return SendMessage(GetHWND(),TVM_EXPAND,TVE_COLLAPSE,(LPARAM)hItem); + } + + int ExpandItemAll(HTREEITEM hItem) + { + ExpandItemEx(hItem); + HTREEITEM hcItem =GetChildItem(hItem); + if(hcItem) + { + ExpandItemAll(hcItem); + while(GetNextItem(hcItem)) + { + hcItem = GetNextItem(hcItem); + ExpandItemAll(hcItem); + } + } + return 1; + } + + HTREEITEM InsertItem(HTREEITEM hItem,HTREEITEM hBeforeItem, string label,LPARAM data,int image = 0) + { + int TVM_INSERTITEM = TV_FIRST + 50; + tvinsertstruct tvis; + tvis.item.mask = TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT|TVIF_HANDLE; + tvis.item.pszText = label; + tvis.item.cchTextMax = 255; + tvis.item.lParam = data; + tvis.item.iImage = image; + tvis.item.iSelectedImage = image; + + tvis.hParent = hItem; + HTREEITEM hItemAfter = 0; + if(hBeforeItem) + { + hItemAfter = GetItem(hBeforeItem,TVGN_PREVIOUS ); + } + if(hItemAfter ==0) hItemAfter = TVI_FIRST; + tvis.hInsertAfter = hItemAfter; + + HTREEITEM h; + h = (HTREEITEM)SendMessage(GetHWND(), TVM_INSERTITEM, 0,(LPARAM)&tvis); + return h; + } + + HTREEITEM InsertItem(HTREEITEM hBeforeItem, string label,LPARAM data,int image = 0) + { + //int TVI_ROOT = 0 - 65536; + HTREEITEM hItem= GetParentItem(hBeforeItem); + if(hItem==0) hItem = TVI_ROOT; + return InsertItem(hItem, hBeforeItem,label,data,image); + } + + HTREEITEM InsertItem(string label,LPARAM data,int image = 0) + { + HTREEITEM hBeforeItem = GetCaretItem(); + return InsertItem(hBeforeItem,label,data,image); + } + + int SetItemChild1(HTREEITEM hItem, int cchild) + { + return SetItemChild(hItem, cchild); + } + + int SetItemChild(HTREEITEM hItem, int cchild) + { + int TVM_SETITEM = TV_FIRST + 63; + + tvitem tvi; + tvi.hItem = hItem; + tvi.mask = TVIF_CHILDREN|TVIF_HANDLE ; + tvi.cChildren = cchild; + SendMessage(GetHWND(), TVM_SETITEM, 0,(LPARAM)&tvi); + return 1; + } + + HTREEITEM InsertChildItem(HTREEITEM hItem, string label, KXMLDOMElement ele, int image = 0) + { + return InsertChildItem(hItem, label, ele.ptr(), image); + } + + HTREEITEM InsertChildItem(HTREEITEM hItem,string label,LPARAM data,int image = 0) + { + HTREEITEM h; + int TVM_INSERTITEM = TV_FIRST + 50; + int TVM_SETITEM = TV_FIRST + 63; + + tvinsertstruct tvis; + tvis.item.mask = TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT; + tvis.item.pszText = label; + tvis.item.cchTextMax = 255; + tvis.item.lParam = data; + tvis.item.iImage = image; + tvis.item.iSelectedImage = image; + + tvis.hParent = hItem; + tvis.hInsertAfter = TVI_LAST; + + h = (HTREEITEM)SendMessage(GetHWND(), TVM_INSERTITEM, 0,(LPARAM)&tvis); + + tvitem tvi; + tvi.hItem = hItem; + tvi.mask = TVIF_CHILDREN|TVIF_HANDLE ; + tvi.cChildren = 1; + SendMessage(GetHWND(), TVM_SETITEM, 0,(LPARAM)&tvi); + + return h; + } + + HTREEITEM InsertChildItemEx(HTREEITEM hItem, string label, KXMLDOMElement ele, int image = 0, int image2 = 0) + { + return InsertChildItemEx(hItem, label, ele.ptr(), image,image2); + } + + HTREEITEM InsertChildItemEx(HTREEITEM hItem,string label,LPARAM data,int image = 0,int image2 = 0) + { + int TVM_INSERTITEM = TV_FIRST + 50; + + tvinsertstruct tvis; + tvis.hParent = hItem; + tvis.hInsertAfter = TVI_LAST; + + tvis.item.mask = TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_TEXT; + tvis.item.pszText = label; + tvis.item.cchTextMax = 255; + tvis.item.lParam = data; + tvis.item.iImage = image; + tvis.item.iSelectedImage = image2; + + //LPTV_INSERTSTRUCT lpis; + HTREEITEM h; + h = (HTREEITEM)SendMessage(GetHWND(), TVM_INSERTITEM, 0, (LPARAM)&tvis); + return h; + } + + int GetChecked(HTREEITEM hItem) + { + int TVM_GETITEMA = (TV_FIRST + 12); + int TVM_GETITEMW = (TV_FIRST + 62); + + tvitem xitem; + xitem.mask = TVIF_STATE | TVIF_HANDLE | TVIF_CHILDREN; + xitem.stateMask = TVIS_STATEIMAGEMASK; + xitem.hItem = hItem; + + SendMessage(GetHWND(), TVM_GETITEMW, 0, (LPARAM)&xitem); + int s = xitem.state; + //trace("%d=%d", s, s / 4096); + if ((s / 4096) > 1) //4096=2^12 鎵撳嬀 + return 1; + else + return 0; + } + + int SetChecked(HTREEITEM hItem, int check) + { + int TVM_SETITEMA = (TV_FIRST + 13); + int TVM_SETITEMW = (TV_FIRST + 63); + int TVM_GETITEMW = (TV_FIRST + 62); + + tvitem xitem; + xitem.mask = TVIF_STATE | TVIF_HANDLE | TVIF_CHILDREN | TVIF_IMAGE | TVIF_PARAM; + xitem.stateMask = TVIS_STATEIMAGEMASK; + xitem.hItem = hItem; + SendMessage(GetHWND(), TVM_GETITEMW, 0, (LPARAM)&xitem); + if (check == 1) //鎵撳嬀 + xitem.state = 4096 * 2; //INDEXTOSTATEIMAGEMASK(2); + else + xitem.state = 4096; //INDEXTOSTATEIMAGEMASK(1); + + return SendMessage(GetHWND(), TVM_SETITEMW, 0, (LPARAM)&xitem); + } + + HTREEITEM ItemFocus(HTREEITEM hItem) + { + int TVM_SELECTITEM = 0x110b; + return (HTREEITEM)SendMessage(GetHWND(),TVM_SELECTITEM,TVGN_CARET,(LPARAM)hItem); + } + + int ItemEdit(HTREEITEM hItem) + { + ItemFocus(hItem); + int TVM_EDITLABEL = (TV_FIRST + 65) ; + //int TVM_EDITLABEL = (TV_FIRST + 14) ; + return SendMessage(GetHWND(), TVM_EDITLABEL, 0, (LPARAM)hItem); + } + + int GetItemImage(HTREEITEM hItem) + { + int TVM_GETITEMA = (TV_FIRST + 12); + int TVM_GETITEMW = (TV_FIRST + 62); + + tvitem xitem; + xitem.mask = TVIF_IMAGE; + xitem.stateMask = TVIS_STATEIMAGEMASK; + xitem.hItem = hItem; + SendMessage(GetHWND(), TVM_GETITEMW, 0, (LPARAM)&xitem); + return xitem.iImage; + } + + int SetItemImage(HTREEITEM hItem, int image) + { + int TVM_GETITEMA = (TV_FIRST + 12); + int TVM_GETITEMW = (TV_FIRST + 62); + int TVM_SETITEMW = (TV_FIRST + 63); + + tvitem xitem; + xitem.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE; + xitem.stateMask = TVIS_STATEIMAGEMASK; + xitem.hItem = hItem; + xitem.iImage = image; + xitem.iSelectedImage = image; + SendMessage(GetHWND(), TVM_SETITEMW, 0, (LPARAM)&xitem); + return 1; + } + + int GetItemChild1(HTREEITEM hItem) + { + return GetItemChild(hItem); + } + + int GetItemChild(HTREEITEM hItem) + { + int TVM_GETITEMW = (TV_FIRST + 62); + + tvitem xitem; + xitem.hItem = hItem; + xitem.mask = TVIF_CHILDREN|TVIF_HANDLE ; + xitem.stateMask = TVIS_STATEIMAGEMASK; + SendMessage(GetHWND(), TVM_GETITEMW, 0,(LPARAM)&xitem); + return xitem.cChildren; + } + + xstring PopupMenu(string str) + { + return (string)SendMessage(GetHWND(), 0x402, (WPARAM)str, 0); + } + + string PopupMenu(KXMLDOMElement e) + { + return PopupMenu(e.xml()); + } + + void SetLineAtRoot(bool value) + { + + int GWL_STYLE_ = -16; + int TVS_LINESATROOT_ = 0x0004; + int style = GetWindowLong(GetHWND(), GWL_STYLE_); + if (value) + SetWindowLong(GetHWND(), GWL_STYLE_, style | TVS_LINESATROOT_); + else + SetWindowLong(GetHWND(), GWL_STYLE_, style & ~TVS_LINESATROOT_); + } + }; \ No newline at end of file -- Gitblit v1.9.3