private void ToolTipExDraw( object sender, DrawToolTipEventArgs e) { Graphics g = e.Graphics; Rectangle bounds = e.Bounds; int alpha = (int)(_opacity * 255); int defaultXOffset = 12; int defaultTopHeight = 36; int tipTextXOffset = 3; int tipTextYOffset = 3; if (Handle != IntPtr.Zero && _opacity < 1D) { IntPtr hDC = g.GetHdc(); NativeMethods.BitBlt( hDC, 0, 0, bounds.Width, bounds.Height, _backDc.Hdc, 0, 0, 0xCC0020); g.ReleaseHdc(hDC); } Color backNormalColor = Color.FromArgb( alpha, this.BackColor); Color baseColor = Color.FromArgb( alpha, ColorTable.BackHover); Color borderColor = Color.FromArgb( alpha, ColorTable.Border); using (LinearGradientBrush brush = new LinearGradientBrush( bounds, backNormalColor, baseColor, LinearGradientMode.Vertical)) { g.FillRectangle(brush, bounds); } ControlPaint.DrawBorder( g, bounds, borderColor, ButtonBorderStyle.Solid); Rectangle imageRect = Rectangle.Empty; Rectangle titleRect; Rectangle tipRect; if (base.ToolTipIcon != ToolTipIcon.None) { tipTextXOffset = defaultXOffset; tipTextYOffset = defaultTopHeight; imageRect = new Rectangle( bounds.X + defaultXOffset - (ImageSize.Width - 16) / 2, bounds.Y + (defaultTopHeight - _imageSize.Height) / 2, _imageSize.Width, _imageSize.Height); Image image = _image; bool bDispose = false; if (image == null) { Icon icon = GetIcon(); if (icon != null) { image = icon.ToBitmap(); bDispose = true; } } if (image != null) { using (InterpolationModeGraphics ig = new InterpolationModeGraphics(g)) { if (_opacity < 1D) { ToolTipRenderHelper.RenderAlphaImage( g, image, imageRect, (float)_opacity); } else { g.DrawImage( image, imageRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel); } } if (bDispose) { image.Dispose(); } } } StringFormat sf = new StringFormat(); sf.LineAlignment = StringAlignment.Center; if (!string.IsNullOrEmpty(base.ToolTipTitle)) { tipTextXOffset = defaultXOffset; tipTextYOffset = defaultTopHeight; int x = imageRect.IsEmpty ? defaultXOffset : imageRect.Right + 3; titleRect = new Rectangle( x, bounds.Y, bounds.Width - x, defaultTopHeight); Color foreColor = Color.FromArgb( alpha, ColorTable.TitleFore); using (Brush brush = new SolidBrush(foreColor)) { g.DrawString( base.ToolTipTitle, _titleFont, brush, titleRect, sf); } } if (!string.IsNullOrEmpty(e.ToolTipText)) { tipRect = new Rectangle( bounds.X + tipTextXOffset, bounds.Y + tipTextYOffset, bounds.Width - tipTextXOffset * 2, bounds.Height - tipTextYOffset); sf = StringFormat.GenericTypographic; Color foreColor = Color.FromArgb( alpha, ColorTable.TipFore); using (Brush brush = new SolidBrush(foreColor)) { g.DrawString( e.ToolTipText, e.Font, brush, tipRect, sf); } } }
protected override void OnRenderItemImage( ToolStripItemImageRenderEventArgs e) { ToolStrip toolStrip = e.ToolStrip; Graphics g = e.Graphics; if (toolStrip is ToolStripDropDown && e.Item is ToolStripMenuItem) { ToolStripMenuItem item = (ToolStripMenuItem)e.Item; if (item.Checked) { return; } Rectangle rect = e.ImageRectangle; if (e.Item.RightToLeft == RightToLeft.Yes) { rect.X -= 2; } else { rect.X += 2; } using (InterpolationModeGraphics ig = new InterpolationModeGraphics(g)) { ToolStripItemImageRenderEventArgs ne = new ToolStripItemImageRenderEventArgs( g, e.Item, e.Image, rect); base.OnRenderItemImage(ne); } } else { base.OnRenderItemImage(e); } }