Exemple #1
0
        private void DrawTab(Graphics g, int index)
        {
            Rectangle rc = GetTabRect(index);

            if (rc.IsEmpty)
            {
                return;
            }

            GraphicsPath gp = BuildBorderPath(rc);

            using ( gp )
            {
                if (index == _activeTabIndex)
                {
                    g.FillPath(GUIControls.ColorScheme.GetBrush(_colorScheme, "ResourceTypeTabs.ActiveBackground",
                                                                rc, SystemBrushes.Control), gp);
                }
                else
                {
                    g.FillPath(GUIControls.ColorScheme.GetBrush(_colorScheme, "ResourceTypeTabs.InactiveBackground",
                                                                rc, SystemBrushes.Control), gp);

                    Rectangle rcGradient = new Rectangle(rc.Left, rc.Bottom - 6, rc.Width, 6);
                    g.FillRectangle(GUIControls.ColorScheme.GetBrush(_colorScheme, "ResourceTypeTabs.InactiveBackgroundBottom",
                                                                     rcGradient, SystemBrushes.Control), rcGradient);
                }

                g.DrawPath(GUIControls.ColorScheme.GetPen(_colorScheme,
                                                          (index == _activeTabIndex) ? "PaneCaption.Border" : "ResourceTypeTabs.Border",
                                                          Pens.Black), gp);
            }

            string tabText = ((TabBarTab)_tabs [index]).Text;
            IntPtr hdc     = g.GetHdc();

            try
            {
                Color clrText = (index == _activeTabIndex)
                    ? GUIControls.ColorScheme.GetColor(_colorScheme, "ResourceTypeTabs.ActiveText", Color.Black)
                    : GUIControls.ColorScheme.GetColor(_colorScheme, "ResourceTypeTabs.InactiveText", Color.Black);
                int            oldColor  = Win32Declarations.SetTextColor(hdc, ColorTranslator.ToWin32(clrText));
                IntPtr         oldFont   = Win32Declarations.SelectObject(hdc, _fontHandle);
                BackgroundMode oldBkMode = Win32Declarations.SetBkMode(hdc, BackgroundMode.TRANSPARENT);

                RECT rect = Win32Declarations.RectangleToRECT(rc);
                Win32Declarations.DrawText(hdc, tabText, tabText.Length, ref rect,
                                           DrawTextFormatFlags.DT_CENTER | DrawTextFormatFlags.DT_VCENTER | DrawTextFormatFlags.DT_NOPREFIX |
                                           DrawTextFormatFlags.DT_END_ELLIPSIS | DrawTextFormatFlags.DT_SINGLELINE);

                Win32Declarations.SetBkMode(hdc, oldBkMode);
                Win32Declarations.SelectObject(hdc, oldFont);
                Win32Declarations.SetTextColor(hdc, oldColor);
            }
            finally
            {
                g.ReleaseHdc(hdc);
            }
        }
Exemple #2
0
        internal void HandleWMNotify(ref Message m)
        {
            uint  pos = Win32Declarations.GetMessagePos();
            Point pt  = new Point(Win32Declarations.LOWORD(pos), Win32Declarations.HIWORD(pos));

            pt = _ownerControl.PointToClient(pt);

            NMHDR nmhdr = (NMHDR)m.GetLParam(typeof(NMHDR));

            if (nmhdr.code == Win32Declarations.TTN_NEEDTEXTW)
            {
                NMTTDISPINFOW dispInfo = (NMTTDISPINFOW)m.GetLParam(typeof(NMTTDISPINFOW));
                _lastToolTipNode   = _ownerControl.GetNodeAt(pt);
                _lastToolTipColumn = _ownerControl.GetColumnAt(pt);
                string tooltip = null;
                if (_lastToolTipColumn != null && _lastToolTipNode != null)
                {
                    Rectangle rc = _ownerControl.GetItemBounds(_lastToolTipNode, _lastToolTipColumn);
                    _lastNeedPlace    = true;
                    tooltip           = _lastToolTipColumn.GetToolTip(_lastToolTipNode, rc, ref _lastNeedPlace);
                    _lastItemShowRect = rc;
                }
                if (tooltip == null || tooltip.Length == 0)
                {
                    dispInfo.szText   = "";
                    dispInfo.lpszText = IntPtr.Zero;
                }
                else
                {
                    dispInfo.lpszText = _toolTipPool.PinString(tooltip);
                }
                Marshal.StructureToPtr(dispInfo, m.LParam, false);
            }
            else if (nmhdr.code == Win32Declarations.TTN_SHOW && _lastNeedPlace)
            {
                Rectangle scItemShowRect = _ownerControl.RectangleToScreen(_lastItemShowRect);
                RECT      rc             = Win32Declarations.RectangleToRECT(scItemShowRect);
                Win32Declarations.SendMessage(Handle, (LVM)Win32Declarations.TTM_ADJUSTRECT,
                                              1, ref rc);

                Win32Declarations.SetWindowPos(Handle, IntPtr.Zero, rc.left, rc.top, 0, 0,
                                               Win32Declarations.SWP_NOSIZE | Win32Declarations.SWP_NOZORDER | Win32Declarations.SWP_NOACTIVATE);
                m.Result = (IntPtr)1;
            }
        }