Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / WinForms / Managed / System / WinForms / RadioButtonRenderer.cs / 1 / RadioButtonRenderer.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Windows.Forms { using System; using System.Drawing; using System.Diagnostics.CodeAnalysis; using System.Windows.Forms.Internal; using System.Windows.Forms.VisualStyles; using Microsoft.Win32; ////// /// public sealed class RadioButtonRenderer { //Make this per-thread, so that different threads can safely use these methods. [ThreadStatic] private static VisualStyleRenderer visualStyleRenderer = null; private static readonly VisualStyleElement RadioElement = VisualStyleElement.Button.RadioButton.UncheckedNormal; private static bool renderMatchingApplicationState = true; //cannot instantiate private RadioButtonRenderer() { } ////// This is a rendering class for the RadioButton control. It works downlevel too (obviously /// without visual styles applied.) /// ////// /// public static bool RenderMatchingApplicationState { get { return renderMatchingApplicationState; } set { renderMatchingApplicationState = value; } } private static bool RenderWithVisualStyles { get { return (!renderMatchingApplicationState || Application.RenderWithVisualStyles); } } ////// If this property is true, then the renderer will use the setting from Application.RenderWithVisualStyles to /// determine how to render. /// If this property is false, the renderer will always render with visualstyles. /// ////// /// public static bool IsBackgroundPartiallyTransparent(RadioButtonState state) { if (RenderWithVisualStyles) { InitializeRenderer((int)state); return visualStyleRenderer.IsBackgroundPartiallyTransparent(); } else { return false; //for downlevel, this is false } } ////// Returns true if the background corresponding to the given state is partially transparent, else false. /// ////// /// [ SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters") // Using Graphics instead of IDeviceContext intentionally ] public static void DrawParentBackground(Graphics g, Rectangle bounds, Control childControl) { if (RenderWithVisualStyles) { InitializeRenderer(0); visualStyleRenderer.DrawParentBackground(g, bounds, childControl); } } ////// This is just a convenience wrapper for VisualStyleRenderer.DrawThemeParentBackground. For downlevel, /// this isn't required and does nothing. /// ////// /// public static void DrawRadioButton(Graphics g, Point glyphLocation, RadioButtonState state) { Rectangle glyphBounds = new Rectangle(glyphLocation, GetGlyphSize(g, state)); if (RenderWithVisualStyles) { InitializeRenderer((int)state); visualStyleRenderer.DrawBackground(g, glyphBounds); } else { ControlPaint.DrawRadioButton(g, glyphBounds, ConvertToButtonState(state)); } } ////// Renders a RadioButton control. /// ////// /// public static void DrawRadioButton(Graphics g, Point glyphLocation, Rectangle textBounds, string radioButtonText, Font font, bool focused, RadioButtonState state) { DrawRadioButton(g, glyphLocation, textBounds, radioButtonText, font, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.SingleLine, focused, state); } ////// Renders a RadioButton control. /// ////// /// public static void DrawRadioButton(Graphics g, Point glyphLocation, Rectangle textBounds, string radioButtonText, Font font, TextFormatFlags flags, bool focused, RadioButtonState state) { Rectangle glyphBounds = new Rectangle(glyphLocation, GetGlyphSize(g, state)); Color textColor; if (RenderWithVisualStyles) { InitializeRenderer((int)state); visualStyleRenderer.DrawBackground(g, glyphBounds); textColor = visualStyleRenderer.GetColor(ColorProperty.TextColor); } else { ControlPaint.DrawRadioButton(g, glyphBounds, ConvertToButtonState(state)); textColor = SystemColors.ControlText; } TextRenderer.DrawText(g, radioButtonText, font, textBounds, textColor, flags); if (focused) { ControlPaint.DrawFocusRectangle(g, textBounds); } } ////// Renders a RadioButton control. /// ////// /// public static void DrawRadioButton(Graphics g, Point glyphLocation, Rectangle textBounds, string radioButtonText, Font font, Image image, Rectangle imageBounds, bool focused, RadioButtonState state) { DrawRadioButton(g, glyphLocation, textBounds, radioButtonText, font, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.SingleLine, image, imageBounds, focused, state); } ////// Renders a RadioButton control. /// ////// /// public static void DrawRadioButton(Graphics g, Point glyphLocation, Rectangle textBounds, string radioButtonText, Font font, TextFormatFlags flags, Image image, Rectangle imageBounds, bool focused, RadioButtonState state) { Rectangle glyphBounds = new Rectangle(glyphLocation, GetGlyphSize(g, state)); Color textColor; if (RenderWithVisualStyles) { InitializeRenderer((int)state); //Keep this drawing order! It matches default drawing order. visualStyleRenderer.DrawImage(g, imageBounds, image); visualStyleRenderer.DrawBackground(g, glyphBounds); textColor = visualStyleRenderer.GetColor(ColorProperty.TextColor); } else { g.DrawImage(image, imageBounds); ControlPaint.DrawRadioButton(g, glyphBounds, ConvertToButtonState(state)); textColor = SystemColors.ControlText; } TextRenderer.DrawText(g, radioButtonText, font, textBounds, textColor, flags); if (focused) { ControlPaint.DrawFocusRectangle(g, textBounds); } } ////// Renders a RadioButton control. /// ////// /// [ SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters") // Using Graphics instead of IDeviceContext intentionally ] public static Size GetGlyphSize(Graphics g, RadioButtonState state) { if (RenderWithVisualStyles) { InitializeRenderer((int)state); return visualStyleRenderer.GetPartSize(g, ThemeSizeType.Draw); } return new Size(13, 13); } internal static ButtonState ConvertToButtonState(RadioButtonState state) { switch (state) { case RadioButtonState.CheckedNormal: case RadioButtonState.CheckedHot: return ButtonState.Checked; case RadioButtonState.CheckedPressed: return (ButtonState.Checked | ButtonState.Pushed); case RadioButtonState.CheckedDisabled: return (ButtonState.Checked | ButtonState.Inactive); case RadioButtonState.UncheckedPressed: return ButtonState.Pushed; case RadioButtonState.UncheckedDisabled: return ButtonState.Inactive; default: return ButtonState.Normal; } } internal static RadioButtonState ConvertFromButtonState(ButtonState state, bool isHot) { if ((state & ButtonState.Checked) == ButtonState.Checked) { if ((state & ButtonState.Pushed) == ButtonState.Pushed) { return RadioButtonState.CheckedPressed; } else if ((state & ButtonState.Inactive) == ButtonState.Inactive) { return RadioButtonState.CheckedDisabled; } else if (isHot) { return RadioButtonState.CheckedHot; } return RadioButtonState.CheckedNormal; } else { //unchecked if ((state & ButtonState.Pushed) == ButtonState.Pushed) { return RadioButtonState.UncheckedPressed; } else if ((state & ButtonState.Inactive) == ButtonState.Inactive) { return RadioButtonState.UncheckedDisabled; } else if (isHot) { return RadioButtonState.UncheckedHot; } return RadioButtonState.UncheckedNormal; } } private static void InitializeRenderer(int state) { if (visualStyleRenderer == null) { visualStyleRenderer = new VisualStyleRenderer(RadioElement.ClassName, RadioElement.Part, state); } else { visualStyleRenderer.SetParameters(RadioElement.ClassName, RadioElement.Part, state); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved./// Returns the size of the RadioButton glyph. /// ///
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- JapaneseCalendar.cs
- GridProviderWrapper.cs
- DesignerSerializerAttribute.cs
- GridPattern.cs
- TemplatePropertyEntry.cs
- CardSpacePolicyElement.cs
- ResetableIterator.cs
- EmbossBitmapEffect.cs
- HtmlEmptyTagControlBuilder.cs
- DelayedRegex.cs
- MethodExpression.cs
- DescendentsWalkerBase.cs
- TreeNodeStyleCollection.cs
- PolyLineSegmentFigureLogic.cs
- DbConnectionStringBuilder.cs
- CatalogPartChrome.cs
- OracleBFile.cs
- HtmlSelectionListAdapter.cs
- TextBox.cs
- ScopelessEnumAttribute.cs
- IdnMapping.cs
- Item.cs
- WebControlParameterProxy.cs
- MailMessage.cs
- FontDriver.cs
- LocalBuilder.cs
- FontWeightConverter.cs
- CodeTypeMemberCollection.cs
- Material.cs
- DynamicExpression.cs
- InkCollectionBehavior.cs
- ProcessRequestArgs.cs
- StructuredTypeInfo.cs
- ProfileService.cs
- SignatureDescription.cs
- LocalizationComments.cs
- DataGridViewTopRowAccessibleObject.cs
- PassportAuthentication.cs
- DataGridItemEventArgs.cs
- Configuration.cs
- EntitySqlQueryState.cs
- EmptyEnumerator.cs
- FileNotFoundException.cs
- AspProxy.cs
- XmlSortKey.cs
- CompoundFileIOPermission.cs
- DefaultBinder.cs
- SymbolDocumentGenerator.cs
- HtmlEmptyTagControlBuilder.cs
- TerminatorSinks.cs
- MarkupObject.cs
- OutputCacheSection.cs
- CheckBoxField.cs
- FileReservationCollection.cs
- AttachmentCollection.cs
- ConfigurationLocationCollection.cs
- ManagedFilter.cs
- GlobalizationAssembly.cs
- RunClient.cs
- TrackingLocationCollection.cs
- IdentityReference.cs
- BitmapEffectInput.cs
- AnnotationAuthorChangedEventArgs.cs
- PageBreakRecord.cs
- ValidationVisibilityAttribute.cs
- WindowsEditBoxRange.cs
- ArrayEditor.cs
- PeerInvitationResponse.cs
- HuffmanTree.cs
- _NegoState.cs
- ProfileEventArgs.cs
- TerminatorSinks.cs
- IsolatedStorageSecurityState.cs
- PersonalizationDictionary.cs
- SerialStream.cs
- DoubleLinkListEnumerator.cs
- TextServicesCompartment.cs
- DbConnectionPool.cs
- ContextQuery.cs
- ActiveXHost.cs
- AttributeCollection.cs
- CodeObjectCreateExpression.cs
- TextDecorationUnitValidation.cs
- StatusBar.cs
- AssemblyBuilder.cs
- TextDecorationLocationValidation.cs
- Content.cs
- WmlLabelAdapter.cs
- BooleanFunctions.cs
- RewritingProcessor.cs
- OrderedDictionaryStateHelper.cs
- XPathDocumentBuilder.cs
- MediaPlayerState.cs
- MetadataWorkspace.cs
- DocumentSequenceHighlightLayer.cs
- DomNameTable.cs
- DBCSCodePageEncoding.cs
- AxisAngleRotation3D.cs
- AdditionalEntityFunctions.cs
- HttpPostProtocolReflector.cs