private void DrawText(TextGraphics textGraphics, string text, Point point, bool selected, bool disabled) { Color color = (disabled ? (selected ? SystemColors.GrayText : SystemColors.ControlDark) : (selected ? SystemColors.HighlightText : SystemColors.MenuText)); if ((!this.IsFlatMenu) && (disabled) && (!selected)) { textGraphics.DrawText(text, new Point(point.X + 1, point.Y + 1), font, SystemColors.ControlLightLight); } textGraphics.DrawText(text, point, font, color); }
private void NotifyCustomDrawMenuBar(ref Message m) { m.Result = (IntPtr)NativeMethods.CDRF_DODEFAULT; NativeMethods.LPNMTBCUSTOMDRAW tbcd = (NativeMethods.LPNMTBCUSTOMDRAW)m.GetLParam(typeof(NativeMethods.LPNMTBCUSTOMDRAW)); bool hot = ((tbcd.nmcd.uItemState & NativeMethods.CDIS_HOT) != 0); bool selected = ((tbcd.nmcd.uItemState & NativeMethods.CDIS_SELECTED) != 0); if (hot || selected) { NativeMethods.RECT rect = tbcd.nmcd.rc; using (Graphics graphics = Graphics.FromHdc(tbcd.nmcd.hdc)) { graphics.FillRectangle(SystemBrushes.Highlight, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top); } using (TextGraphics textGraphics = new TextGraphics(tbcd.nmcd.hdc)) { Font font = this.Font; string text = this.items[tbcd.nmcd.dwItemSpec].Text; Size size = textGraphics.MeasureText(text, font); Point point = new Point(rect.left + ((rect.right - rect.left - size.Width) / 2), rect.top + ((rect.bottom - rect.top - size.Height) / 2)); textGraphics.DrawText(text, point, font, SystemColors.HighlightText); } m.Result = (IntPtr)NativeMethods.CDRF_SKIPDEFAULT; } }
private void NotifyCustomDrawMenuBar(ref Message m) { m.Result = (IntPtr) NativeMethods.CDRF_DODEFAULT; NativeMethods.LPNMTBCUSTOMDRAW tbcd = (NativeMethods.LPNMTBCUSTOMDRAW) m.GetLParam(typeof(NativeMethods.LPNMTBCUSTOMDRAW)); bool hot = ((tbcd.nmcd.uItemState & NativeMethods.CDIS_HOT) != 0); bool selected = ((tbcd.nmcd.uItemState & NativeMethods.CDIS_SELECTED) != 0); if (hot || selected) { NativeMethods.RECT rect = tbcd.nmcd.rc; using (Graphics graphics = Graphics.FromHdc(tbcd.nmcd.hdc)) { graphics.FillRectangle(SystemBrushes.Highlight, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top); } using (TextGraphics textGraphics = new TextGraphics(tbcd.nmcd.hdc)) { Font font = this.Font; string text = this.items[tbcd.nmcd.dwItemSpec].Text; Size size = textGraphics.MeasureText(text, font); Point point = new Point(rect.left + ((rect.right - rect.left - size.Width) / 2), rect.top + ((rect.bottom - rect.top - size.Height) / 2)); textGraphics.DrawText(text, point, font, SystemColors.HighlightText); } m.Result = (IntPtr) NativeMethods.CDRF_SKIPDEFAULT; } }
protected override void OnDrawItem(DrawItemEventArgs e) { if (!this.Enabled) { e.Graphics.FillRectangle(SystemBrushes.Control, e.Bounds); } else { e.DrawBackground(); string fontName = null; if (e.Index == -1) { // Text shown in the combobox itself fontName = this.Text; } else { fontName = (string)this.Items[e.Index]; } Font font = null; if ((fontName != null) && (fontName.Length != 0)) { try { FontFamily fontFamily = new FontFamily(fontName); FontStyle fontStyle = FontStyle.Regular; if (!fontFamily.IsStyleAvailable(fontStyle)) { fontStyle = FontStyle.Italic; if (!fontFamily.IsStyleAvailable(fontStyle)) { fontStyle = FontStyle.Bold; if (!fontFamily.IsStyleAvailable(fontStyle)) { throw new NotSupportedException(); } } } font = new Font(fontName, (float)((e.Bounds.Height - 2) / 1.2), fontStyle, GraphicsUnit.Pixel); } catch (Exception) { } } Rectangle textBounds = new Rectangle(e.Bounds.Left + 2, e.Bounds.Top, e.Bounds.Width - 2, e.Bounds.Height); using (TextGraphics textGraphics = new TextGraphics(e.Graphics)) { textGraphics.DrawText(fontName, textBounds.Location, (font != null) ? font : e.Font, e.ForeColor); } if (font != null) { font.Dispose(); } } }