protected virtual void OnPostDrawNode(PostDrawTreeNodeEventArgs e) { EventHandler<PostDrawTreeNodeEventArgs> handler = base.Events[EventPostDrawNode] as EventHandler<PostDrawTreeNodeEventArgs>; if (handler != null) { handler(this, e); } }
private void WmCustomDraw(ref Message m) { TreeNode node; TreeNodeStates itemState; switch (Microsoft.Win32.NMCUSTOMDRAW.GetDrawStage(m.LParam)) { case CDDS.CDDS_ITEMPREPAINT: node = this.NodeFromHandle(Microsoft.Win32.NMCUSTOMDRAW.GetItemSpec(m.LParam)); if (node != null) { if (!base.ClientRectangle.IntersectsWith(Microsoft.Win32.NMCUSTOMDRAW.GetRect(m.LParam))) { m.Result = (IntPtr) 4L; } else { System.Drawing.Color backColor = Microsoft.Win32.NMTVCUSTOMDRAW.GetBackColor(m.LParam); System.Drawing.Color foreColor = Microsoft.Win32.NMTVCUSTOMDRAW.GetForeColor(m.LParam); itemState = (TreeNodeStates) Microsoft.Win32.NMCUSTOMDRAW.GetItemState(m.LParam); IntPtr ptr = Windows.SendMessage(base.Handle, 0x110a, (IntPtr) 8L, IntPtr.Zero); if ((ptr != IntPtr.Zero) && (node.Handle == ptr)) { itemState |= TreeNodeStates.Marked; } GetNodeColorsEventArgs e = new GetNodeColorsEventArgs(node, itemState, backColor, foreColor); this.OnGetNodeColors(e); if (e.BackColor != backColor) { Microsoft.Win32.NMTVCUSTOMDRAW.SetBackColor(m.LParam, e.BackColor); } if (e.ForeColor != foreColor) { Microsoft.Win32.NMTVCUSTOMDRAW.SetForeColor(m.LParam, e.ForeColor); } if (base.DrawMode != TreeViewDrawMode.Normal) { m.Result = (IntPtr) (((int) m.Result) | 0x10); } } break; } break; case CDDS.CDDS_ITEMPOSTPAINT: node = this.NodeFromHandle(Microsoft.Win32.NMCUSTOMDRAW.GetItemSpec(m.LParam)); if (node != null) { Rectangle bounds = node.Bounds; if (base.ClientRectangle.IntersectsWith(bounds)) { itemState = (TreeNodeStates) Microsoft.Win32.NMCUSTOMDRAW.GetItemState(m.LParam); using (Graphics graphics = Graphics.FromHdcInternal(Microsoft.Win32.NMCUSTOMDRAW.GetHdc(m.LParam))) { PostDrawTreeNodeEventArgs args2 = new PostDrawTreeNodeEventArgs(graphics, node, bounds, itemState); this.OnPostDrawNode(args2); } } } break; } }
protected override void OnPostDrawNode(PostDrawTreeNodeEventArgs e) { if (base.ImageList != null) { IVirtualItem tag = e.Node.Tag as IVirtualItem; if (tag != null) { Rectangle iconRect = this.GetIconRect(e.Node); if (!iconRect.IsEmpty && base.ClientRectangle.IntersectsWith(iconRect)) { Image image = VirtualIcon.GetIcon(tag, ImageHelper.DefaultSmallIconSize, this.WatchChanges ? IconStyle.CanUseDelayedExtract : ((IconStyle) 0)); if (image != null) { Color empty = Color.Empty; float blendLevel = 0.7f; VirtualHighligher highlighter = VirtualIcon.GetHighlighter(tag); if ((highlighter != null) && highlighter.AlphaBlend) { empty = highlighter.BlendColor; blendLevel = highlighter.BlendLevel; } if ((base.HotTracking && !base.FullRowSelect) && !base.ExplorerTheme) { using (Brush brush = new SolidBrush(this.BackColor)) { e.Graphics.FillRectangle(brush, iconRect); } } lock (image) { iconRect.Y += (iconRect.Height - image.Height) / 2; if (empty.IsEmpty) { e.Graphics.DrawImage(image, iconRect.Location); } else { ImageHelper.DrawBlendImage(e.Graphics, image, empty, blendLevel, iconRect.X, iconRect.Y); } } base.OnPostDrawNode(e); } } } } }