Beispiel #1
0
        private PaintTreeItemEventArgs GetPaintTreeItemEventArgs(NMTVCUSTOMDRAW customDrawInfo)
        {
            TreeNode node = TreeNode.FromHandle(this, (IntPtr)customDrawInfo.nmcd.dwItemSpec);

            return
                (new PaintTreeItemEventArgs
                 (
                     node,
                     Graphics.FromHdc(customDrawInfo.nmcd.hdc),
                     (customDrawInfo.nmcd.uItemState & (int)CustomDrawItemStateFlags.CDIS_FOCUS) != 0,
                     (customDrawInfo.nmcd.uItemState & (int)CustomDrawItemStateFlags.CDIS_SELECTED) != 0,
                     Rectangle.FromLTRB(customDrawInfo.nmcd.rc.left, customDrawInfo.nmcd.rc.top, customDrawInfo.nmcd.rc.right, customDrawInfo.nmcd.rc.bottom)
                 ));
        }
Beispiel #2
0
        private bool NotifyTreeCustomDraw(ref Message message)
        {
            message.Result = (IntPtr)CustomDrawReturnFlags.CDRF_DODEFAULT;
            NMTVCUSTOMDRAW customDrawInfo = (NMTVCUSTOMDRAW)message.GetLParam(typeof(NMTVCUSTOMDRAW));
            IntPtr         thisHandle     = Handle;

            if (customDrawInfo.nmcd.hdr.hwndFrom == Handle)
            {
                switch (customDrawInfo.nmcd.dwDrawStage)
                {
                case (int)CustomDrawDrawStateFlags.CDDS_PREPAINT:
                    message.Result = (IntPtr)CustomDrawReturnFlags.CDRF_NOTIFYITEMDRAW;
                    break;

                case (int)CustomDrawDrawStateFlags.CDDS_ITEMPREPAINT:
                    message.Result = (IntPtr)CustomDrawReturnFlags.CDRF_NOTIFYPOSTPAINT;
                    PaintTreeItemEventArgs args = GetPaintTreeItemEventArgs(customDrawInfo);
                    try
                    {
                        args.ForeColor = SystemColors.WindowText;
                        args.BackColor = SystemColors.Window;
                        if (DoPrePaintItem(args))
                        {
                            DoPostPaintItem(args);
                            message.Result = (IntPtr)CustomDrawReturnFlags.CDRF_SKIPDEFAULT;
                        }
                        customDrawInfo.clrTextBk =
                            RGB
                            (
                                args.BackColor.R,
                                args.BackColor.G,
                                args.BackColor.B
                            );
                        customDrawInfo.clrText =
                            RGB
                            (
                                args.ForeColor.R,
                                args.ForeColor.G,
                                args.ForeColor.B
                            );
                        Marshal.StructureToPtr(customDrawInfo, message.LParam, true);
                    }
                    finally
                    {
                        args.Graphics.Dispose();
                    }
                    break;

                case (int)CustomDrawDrawStateFlags.CDDS_ITEMPOSTPAINT:
                    args = GetPaintTreeItemEventArgs(customDrawInfo);
                    try
                    {
                        DoPostPaintItem(args);
                    }
                    finally
                    {
                        args.Graphics.Dispose();
                    }
                    break;
                }
            }
            return(false);
        }