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