From a4d2315ee4ca3f6177b4fb2526bed2feff3d89be Mon Sep 17 00:00:00 2001
From: lifan <2308045698@qq.com>
Date: 星期三, 22 十月 2025 16:52:58 +0800
Subject: [PATCH] update
---
jrj/xframe/xcontrol/xtreeview.hpp | 1072 +++++++++++++++++++++++++++++-----------------------------
1 files changed, 538 insertions(+), 534 deletions(-)
diff --git a/jrj/xframe/xcontrol/xtreeview.hpp b/jrj/xframe/xcontrol/xtreeview.hpp
index d559fcb..6ee1556 100644
--- a/jrj/xframe/xcontrol/xtreeview.hpp
+++ b/jrj/xframe/xcontrol/xtreeview.hpp
@@ -1,535 +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,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,int 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;
- }
-#if 0
- string PopupMenu(string str)
- {
- return (str)SendMessage(GetHWND(), 0x402, (WPARAM)str, 0);
- }
-
- string PopupMenu(KXMLDOMElement e)
- {
- return PopupMenu(e.xml);
- }
-#endif
-
- 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