/// <summary>Gets the node values.</summary> /// <param name="node">The <see cref="TreeNode"/> instance for which to get details.</param> /// <param name="mask">The mask of items to get.</param> /// <param name="stateMask">The mask of states to get.</param> /// <returns>A <see cref="TVITEMEX"/> structure with the information.</returns> public static TVITEMEX GetItem(this TreeNode node, TreeViewItemMask mask = (TreeViewItemMask)0x13FF, TreeViewItemStates stateMask = (TreeViewItemStates)0xFFFF) { var tvItem = new TVITEMEX { hItem = node.Handle, mask = mask.SetFlags(TreeViewItemMask.TVIF_HANDLE).SetFlags(TreeViewItemMask.TVIF_TEXT, false), stateMask = stateMask }; SendMessage(node.TreeView.Handle, TreeViewMessage.TVM_GETITEM, default, ref tvItem);
/// <summary> /// Set a node's height. Will throw an error if the Node has not yet been added to a TreeView, /// as it's handle will not exist. /// </summary> /// <param name="tn">TreeNode to work with</param> /// <param name="height">Height in multiples of ItemHeight</param> public static void SetHeight(this TreeNode tn, int height) { TVITEMEX tvix = new TVITEMEX { mask = (uint)(Mask.Handle | Mask.Integral), hItem = tn.Handle, iIntegral = height }; SendMessage(tn.TreeView.Handle, TVM_SETITEM, IntPtr.Zero, ref tvix); }
/// <summary> /// Get a node's height. Will throw an error if the Node has not yet been added to a TreeView, /// as it's handle will not exist. /// </summary> /// <param name="tn">TreeNode to work with</param> /// <returns>Height in multiples of ItemHeight</returns> public static int GetHeight(this TreeNode tn) { TVITEMEX tvix = new TVITEMEX { mask = (uint)(Mask.Handle | Mask.Integral), hItem = tn.Handle, iIntegral = 0 }; SendMessage(tn.TreeView.Handle, TVM_GETITEM, IntPtr.Zero, ref tvix); return(tvix.iIntegral); }
/// <summary>Sets the <see cref="TVITEM"/> values.</summary> /// <param name="node">The <see cref="TreeNode"/> instance for which to set details.</param> /// <param name="tvItem">The <see cref="TVITEMEX"/> instance.</param> public static bool SetItem(this TreeNode node, ref TVITEMEX tvItem) => SendMessage(node.TreeView.Handle, TreeViewMessage.TVM_SETITEM, default, ref tvItem).ToInt32() != 0;
//private static extern IntPtr SendMessage(IntPtr hwnd, uint msg, IntPtr wp, IntPtr lp); private static extern IntPtr SendMessage(IntPtr hwnd, uint msg, IntPtr wp, ref TVITEMEX lp);