protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { if (this.EnsureRenderer()) { Rectangle bgRect = this.GetBackgroundRectangle(e.Item); bgRect.Width = bgRect.Height; // Now, mirror its position if the menu item is RTL. if (e.Item.RightToLeft == RightToLeft.Yes) bgRect = new Rectangle(e.ToolStrip.ClientSize.Width - bgRect.X - bgRect.Width, bgRect.Y, bgRect.Width, bgRect.Height); this.Renderer.SetParameters(this.MenuClass, (int)MenuParts.PopupCheckBackground, e.Item.Enabled ? (int)MenuPopupCheckBackgroundStates.Normal : (int)MenuPopupCheckBackgroundStates.Disabled); this.Renderer.DrawBackground(e.Graphics, bgRect); Rectangle checkRect = e.ImageRectangle; checkRect.X = bgRect.X + bgRect.Width / 2 - checkRect.Width / 2; checkRect.Y = bgRect.Y + bgRect.Height / 2 - checkRect.Height / 2; // I don't think ToolStrip even supports radio box items, so no need to render them. var item = e.Item as ToolStripMenuItem; if (item.CheckState == CheckState.Indeterminate) { this.Renderer.SetParameters(this.MenuClass, (int)MenuParts.PopupCheck, e.Item.Enabled ? (int)MenuPopupCheckStates.BulletNormal : (int)MenuPopupCheckStates.BulletDisabled); } else { this.Renderer.SetParameters(this.MenuClass, (int)MenuParts.PopupCheck, e.Item.Enabled ? (int)MenuPopupCheckStates.CheckmarkNormal : (int)MenuPopupCheckStates.CheckmarkDisabled); } this.Renderer.DrawBackground(e.Graphics, checkRect); } else { base.OnRenderItemCheck(e); } }
protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) { if (PaintItemImage != null) { PaintItemImage(this, e); } }
public void DrawItemImage(ToolStripItemImageRenderEventArgs e) { }
protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) { this.renderer.DrawItemImage(e); }
private void Renderer_PaintItemImage(object sender, ToolStripItemImageRenderEventArgs e) { G = e.Graphics; G.DrawImage(e.Image, new Rectangle(4, 1, 16, 16)); }
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { //base.OnRenderItemCheck(e); e.Graphics.DrawImage(ModernForms.Properties.Resources.check, e.ImageRectangle); }
protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) { base.OnRenderItemImage(e); }
/// <summary> /// Raises the RenderItemImage event. /// </summary> /// <param name="e">An ToolStripItemImageRenderEventArgs containing the event data.</param> protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) { // Is this a min/restore/close pendant button if (e.Item.GetType().ToString() == "System.Windows.Forms.MdiControlStrip+ControlBoxMenuItem") { // Get access to the owning form of the mdi control strip Form f = e.ToolStrip.Parent.TopLevelControl as Form; if (f != null) { // Get the mdi control strip instance PropertyInfo piMCS = typeof(Form).GetProperty("MdiControlStrip", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField); if (piMCS != null) { object mcs = piMCS.GetValue(f, null); if (mcs != null) { // Get the min/restore/close internal menu items Type mcsType = mcs.GetType(); FieldInfo fiM = mcsType.GetField("minimize", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField); FieldInfo fiR = mcsType.GetField("restore", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField); FieldInfo fiC = mcsType.GetField("close", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField); if ((fiM != null) && (fiR != null) && (fiC != null)) { ToolStripMenuItem m = fiM.GetValue(mcs) as ToolStripMenuItem; ToolStripMenuItem r = fiR.GetValue(mcs) as ToolStripMenuItem; ToolStripMenuItem c = fiC.GetValue(mcs) as ToolStripMenuItem; if ((m != null) && (r != null) && (c != null)) { // Compare the event provided image with the internal cached ones to discover the type of pendant button we are drawing PaletteButtonSpecStyle specStyle = PaletteButtonSpecStyle.Generic; if (m.Image == e.Image) { specStyle = PaletteButtonSpecStyle.PendantMin; } else if (r.Image == e.Image) { specStyle = PaletteButtonSpecStyle.PendantRestore; } else if (c.Image == e.Image) { specStyle = PaletteButtonSpecStyle.PendantClose; } // A match, means we have a known pendant button if (specStyle != PaletteButtonSpecStyle.Generic) { // Grab the palette pendant details needed for drawing Image paletteImage = KCT.Palette.GetButtonSpecImage(specStyle, PaletteState.Normal); Color transparentColor = KCT.Palette.GetButtonSpecImageTransparentColor(specStyle); // Finally we actually have an image to draw! if (paletteImage != null) { using (ImageAttributes attribs = new ImageAttributes()) { // Setup mapping to make required color transparent ColorMap remap = new ColorMap(); remap.OldColor = transparentColor; remap.NewColor = Color.Transparent; attribs.SetRemapTable(new ColorMap[] { remap }); // Phew, actually draw the darn thing e.Graphics.DrawImage(paletteImage, e.ImageRectangle, 0, 0, e.Image.Width, e.Image.Height, GraphicsUnit.Pixel, attribs); // Do not let base class draw system defined image return; } } } } } } } } } base.OnRenderItemImage(e); }
/// <summary> /// 选中项 /// </summary> /// <param name="e"></param> protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { Image check = AssemblyHelper.GetImage("QQ.ContextMenu.menu_check.png"); e.Graphics.DrawImage(check, e.ImageRectangle); }
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { _renderer.DrawItemCheck(e); }
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { if (MonoWorkarounds.IsRequired()) { base.OnRenderItemCheck(e); return; } Image imgToDispose = null; try { Graphics g = e.Graphics; Image imgOrg = e.Image; Rectangle rOrg = e.ImageRectangle; ToolStripItem tsi = e.Item; Image img = imgOrg; Rectangle r = rOrg; Debug.Assert(r.Width == r.Height); Debug.Assert(DpiUtil.ScalingRequired || (r.Size == ((img != null) ? img.Size : new Size(3, 5)))); // Override the .NET checkmark bitmap ToolStripMenuItem tsmi = (tsi as ToolStripMenuItem); if ((tsmi != null) && tsmi.Checked && (tsmi.Image == null)) { img = Properties.Resources.B16x16_MenuCheck; } if (tsi != null) { Rectangle rContent = tsi.ContentRectangle; Debug.Assert(rContent.Contains(r) || DpiUtil.ScalingRequired); r.Intersect(rContent); if (r.Height < r.Width) { r.Width = r.Height; } } else { Debug.Assert(false); } if ((img != null) && (r.Size != img.Size)) { img = GfxUtil.ScaleImage(img, r.Width, r.Height, ScaleTransformFlags.UIIcon); imgToDispose = img; } if ((img != imgOrg) || (r != rOrg)) { ToolStripItemImageRenderEventArgs eNew = new ToolStripItemImageRenderEventArgs(g, tsi, img, r); base.OnRenderItemCheck(eNew); return; } /* ToolStripMenuItem tsmi = (tsi as ToolStripMenuItem); * if((tsmi != null) && tsmi.Checked && (r.Width > 0) && * (r.Height > 0) && (img != null) && * ((img.Width != r.Width) || (img.Height != r.Height))) * { * Rectangle rContent = tsmi.ContentRectangle; * r.Intersect(rContent); * if(r.Height < r.Width) * r.Width = r.Height; * * ProfessionalColorTable ct = this.ColorTable; * * Color clrBorder = ct.ButtonSelectedBorder; * * Color clrBG = ct.CheckBackground; * if(tsmi.Selected) clrBG = ct.CheckSelectedBackground; * if(tsmi.Pressed) clrBG = ct.CheckPressedBackground; * * Color clrFG = ((UIUtil.ColorToGrayscale(clrBG).R >= 128) ? * Color.Black : Color.White); * * using(SolidBrush sb = new SolidBrush(clrBG)) * { * g.FillRectangle(sb, r); * } * using(Pen p = new Pen(clrBorder)) * { * g.DrawRectangle(p, r.X, r.Y, r.Width - 1, r.Height - 1); * } * * ControlPaint.DrawMenuGlyph(g, r, MenuGlyph.Checkmark, * clrFG, Color.Transparent); * * // if((img.Width == r.Width) && (img.Height == r.Height)) * // g.DrawImage(img, r); * // else * // { * // Image imgScaled = GfxUtil.ScaleImage(img, * // r.Width, r.Height, ScaleTransformFlags.UIIcon); * // g.DrawImage(imgScaled, r); * // imgScaled.Dispose(); * // } * * return; * } */ /* if((img != null) && (r.Width > 0) && (r.Height > 0) && * ((img.Width != r.Width) || (img.Height != r.Height)) && * (tsi != null)) * { * // This should only happen on high DPI * Debug.Assert(DpiUtil.ScalingRequired); * * Image imgScaled = GfxUtil.ScaleImage(img, * r.Width, r.Height, ScaleTransformFlags.UIIcon); * // Image imgScaled = new Bitmap(r.Width, r.Height, * // PixelFormat.Format32bppArgb); * // using(Graphics gScaled = Graphics.FromImage(imgScaled)) * // { * // gScaled.Clear(Color.Transparent); * * // Color clrFG = ((UIUtil.ColorToGrayscale( * // this.ColorTable.CheckBackground).R >= 128) ? * // Color.FromArgb(18, 24, 163) : Color.White); * * // Rectangle rGlyph = new Rectangle(0, 0, r.Width, r.Height); * // // rGlyph.Inflate(-r.Width / 12, -r.Height / 12); * * // ControlPaint.DrawMenuGlyph(gScaled, rGlyph, * // MenuGlyph.Bullet, clrFG, Color.Transparent); * // } * * ToolStripItemImageRenderEventArgs eMod = * new ToolStripItemImageRenderEventArgs(g, e.Item, * imgScaled, r); * base.OnRenderItemCheck(eMod); * * imgScaled.Dispose(); * return; * } */ } catch (Exception) { Debug.Assert(false); } finally { if (imgToDispose != null) { imgToDispose.Dispose(); } } base.OnRenderItemCheck(e); // Not in 'finally', see 'eNew' }
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { e.Graphics.DrawImage(Properties.Resources.sui_ticked, new Rectangle(8, 2, 20, 20)); }
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { ToolStrip toolStrip = e.ToolStrip; var isHeadControl = false; if (toolStrip.Tag != null && toolStrip.Tag.ToString().Contains("$")) { isHeadControl = true; } Graphics graphics = e.Graphics; if (toolStrip is ToolStripDropDown && e.Item is ToolStripMenuItem) { bool drawLogo = DrawLogo(toolStrip); int offsetMargin = drawLogo ? OffsetMargin : 0; Rectangle rect = e.ImageRectangle; if (e.Item.RightToLeft == RightToLeft.Yes) { rect.X -= offsetMargin + 2; } else { rect.X += offsetMargin + 2; } rect.Width = 13; rect.Y += 1; rect.Height -= 3; using (SmoothingModeGraphics sg = new SmoothingModeGraphics(graphics)) { using (GraphicsPath path = new GraphicsPath()) { path.AddRectangle(rect); using (PathGradientBrush brush = new PathGradientBrush(path)) { brush.CenterColor = StyleSet.ToolStripDropDownPressedCenterColor; brush.CenterColor = Color.Red; brush.SurroundColors = new Color[] { isHeadControl?StyleSet.HeadToolStripItemPressedBackColor : StyleSet.ControlPressedBackColor }; Blend blend = new Blend(); blend.Positions = new float[] { 0f, 0.3f, 1f }; blend.Factors = new float[] { 0f, 0.5f, 1f }; brush.Blend = blend; graphics.FillRectangle(brush, rect); } } using (Pen pen = new Pen(StyleSet.HeadToolStripItemPressedBackColor)) { graphics.DrawRectangle(pen, rect); } GraphicsHelper.DrawHollowwRectangle(graphics, rect, isHeadControl ? StyleSet.HeadToolStripItemCheckedBorderColor : StyleSet.ControlCheckedBorderColor); } } else { base.OnRenderItemCheck(e); } }
/// <summary> /// Extends BeginInvoke so that when a state object is not needed, null does not need to be passed. /// <example> /// toolstripitemimagerendereventhandler.BeginInvoke(sender, e, callback); /// </example> /// </summary> public static IAsyncResult BeginInvoke(this ToolStripItemImageRenderEventHandler toolstripitemimagerendereventhandler, Object sender, ToolStripItemImageRenderEventArgs e, AsyncCallback callback) { if (toolstripitemimagerendereventhandler == null) { throw new ArgumentNullException("toolstripitemimagerendereventhandler"); } return(toolstripitemimagerendereventhandler.BeginInvoke(sender, e, callback, null)); }