Пример #1
0
 protected virtual void OnPostDrawNode(PostDrawTreeNodeEventArgs e)
 {
     EventHandler<PostDrawTreeNodeEventArgs> handler = base.Events[EventPostDrawNode] as EventHandler<PostDrawTreeNodeEventArgs>;
     if (handler != null)
     {
         handler(this, e);
     }
 }
Пример #2
0
        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);
                 }
             }
         }
     }
 }