Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / LinkUtilities.cs / 1305376 / LinkUtilities.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms {
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Globalization;
using System.Security.Permissions;
internal class LinkUtilities {
// IE fonts and colors
static Color ielinkColor = Color.Empty;
static Color ieactiveLinkColor = Color.Empty;
static Color ievisitedLinkColor = Color.Empty;
const string IESettingsRegPath = "Software\\Microsoft\\Internet Explorer\\Settings";
public const string IEMainRegPath = "Software\\Microsoft\\Internet Explorer\\Main";
const string IEAnchorColor = "Anchor Color";
const string IEAnchorColorVisited = "Anchor Color Visited";
const string IEAnchorColorHover = "Anchor Color Hover";
///
///
/// Retrieves a named IE color from the registry. There are constants at the top
/// of this file of the valid names to retrieve.
///
private static Color GetIEColor(string name) {
// SECREVIEW : We are just reading the IE color settings from the registry...
//
// SECUNDONE : This assert doesn't work... assert everything for now...
//
//new RegistryPermission(RegistryPermissionAccess.Read, "HKCU\\" + IESettingsRegPath).Assert();
new RegistryPermission(PermissionState.Unrestricted).Assert();
try {
RegistryKey key = Registry.CurrentUser.OpenSubKey(IESettingsRegPath);
if (key != null) {
// Since this comes from the registry, be very careful about its contents.
//
string s = (string)key.GetValue(name);
key.Close();
if (s != null) {
string[] rgbs = s.Split(new char[] {','});
int[] rgb = new int[3];
int nMax = Math.Min(rgb.Length, rgbs.Length);
//NOTE: if we can't parse rgbs[i], rgb[i] will be set to 0.
for (int i = 0; i < nMax; i++)
{
int.TryParse(rgbs[i], out rgb[i]);
}
return Color.FromArgb(rgb[0], rgb[1], rgb[2]);
}
}
if (string.Equals(name, IEAnchorColor, StringComparison.OrdinalIgnoreCase)) {
return Color.Blue;
}
else if (string.Equals(name, IEAnchorColorVisited, StringComparison.OrdinalIgnoreCase)) {
return Color.Purple;
}
else if (string.Equals(name, IEAnchorColorHover, StringComparison.OrdinalIgnoreCase)) {
return Color.Red;
}
else {
return Color.Red;
}
}
finally {
System.Security.CodeAccessPermission.RevertAssert();
}
}
public static Color IELinkColor {
get {
if (ielinkColor.IsEmpty) {
ielinkColor = GetIEColor(IEAnchorColor);
}
return ielinkColor;
}
}
public static Color IEActiveLinkColor {
get {
if (ieactiveLinkColor.IsEmpty) {
ieactiveLinkColor = GetIEColor(IEAnchorColorHover);
}
return ieactiveLinkColor;
}
}
public static Color IEVisitedLinkColor {
get {
if (ievisitedLinkColor.IsEmpty) {
ievisitedLinkColor = GetIEColor(IEAnchorColorVisited);
}
return ievisitedLinkColor;
}
}
///
///
/// Retrieves the IE settings for link behavior from the registry.
///
public static LinkBehavior GetIELinkBehavior() {
// SECREVIEW : We are just reading the IE color settings from the registry...
//
// SECUNDONE : This assert doesn't work... assert everything for now...
//
//new RegistryPermission(RegistryPermissionAccess.Read, "HKCU\\" + IEMainRegPath).Assert();
new RegistryPermission(PermissionState.Unrestricted).Assert();
try {
RegistryKey key = Registry.CurrentUser.OpenSubKey(IEMainRegPath);
if (key != null) {
string s = (string)key.GetValue("Anchor Underline");
key.Close();
if (s != null && string.Compare(s, "no", true, CultureInfo.InvariantCulture) == 0) {
return LinkBehavior.NeverUnderline;
}
if (s != null && string.Compare(s, "hover", true, CultureInfo.InvariantCulture) == 0) {
return LinkBehavior.HoverUnderline;
}
else {
return LinkBehavior.AlwaysUnderline;
}
}
}
finally {
System.Security.CodeAccessPermission.RevertAssert();
}
return LinkBehavior.AlwaysUnderline;
}
public static void EnsureLinkFonts(Font baseFont, LinkBehavior link, ref Font linkFont, ref Font hoverLinkFont) {
if (linkFont != null && hoverLinkFont != null) {
return;
}
bool underlineLink = true;
bool underlineHover = true;
if (link == LinkBehavior.SystemDefault) {
link = GetIELinkBehavior();
}
switch (link) {
case LinkBehavior.AlwaysUnderline:
underlineLink = true;
underlineHover = true;
break;
case LinkBehavior.HoverUnderline:
underlineLink = false;
underlineHover = true;
break;
case LinkBehavior.NeverUnderline:
underlineLink = false;
underlineHover = false;
break;
}
Font f = baseFont;
// We optimize for the "same" value (never & always) to avoid creating an
// extra font object.
//
if (underlineHover == underlineLink) {
FontStyle style = f.Style;
if (underlineHover) {
style |= FontStyle.Underline;
}
else {
style &= ~FontStyle.Underline;
}
hoverLinkFont = new Font(f, style);
linkFont = hoverLinkFont;
}
else {
FontStyle hoverStyle = f.Style;
if (underlineHover) {
hoverStyle |= FontStyle.Underline;
}
else {
hoverStyle &= ~FontStyle.Underline;
}
hoverLinkFont = new Font(f, hoverStyle);
FontStyle linkStyle = f.Style;
if (underlineLink) {
linkStyle |= FontStyle.Underline;
}
else {
linkStyle &= ~FontStyle.Underline;
}
linkFont = new Font(f, linkStyle);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms {
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Globalization;
using System.Security.Permissions;
internal class LinkUtilities {
// IE fonts and colors
static Color ielinkColor = Color.Empty;
static Color ieactiveLinkColor = Color.Empty;
static Color ievisitedLinkColor = Color.Empty;
const string IESettingsRegPath = "Software\\Microsoft\\Internet Explorer\\Settings";
public const string IEMainRegPath = "Software\\Microsoft\\Internet Explorer\\Main";
const string IEAnchorColor = "Anchor Color";
const string IEAnchorColorVisited = "Anchor Color Visited";
const string IEAnchorColorHover = "Anchor Color Hover";
///
///
/// Retrieves a named IE color from the registry. There are constants at the top
/// of this file of the valid names to retrieve.
///
private static Color GetIEColor(string name) {
// SECREVIEW : We are just reading the IE color settings from the registry...
//
// SECUNDONE : This assert doesn't work... assert everything for now...
//
//new RegistryPermission(RegistryPermissionAccess.Read, "HKCU\\" + IESettingsRegPath).Assert();
new RegistryPermission(PermissionState.Unrestricted).Assert();
try {
RegistryKey key = Registry.CurrentUser.OpenSubKey(IESettingsRegPath);
if (key != null) {
// Since this comes from the registry, be very careful about its contents.
//
string s = (string)key.GetValue(name);
key.Close();
if (s != null) {
string[] rgbs = s.Split(new char[] {','});
int[] rgb = new int[3];
int nMax = Math.Min(rgb.Length, rgbs.Length);
//NOTE: if we can't parse rgbs[i], rgb[i] will be set to 0.
for (int i = 0; i < nMax; i++)
{
int.TryParse(rgbs[i], out rgb[i]);
}
return Color.FromArgb(rgb[0], rgb[1], rgb[2]);
}
}
if (string.Equals(name, IEAnchorColor, StringComparison.OrdinalIgnoreCase)) {
return Color.Blue;
}
else if (string.Equals(name, IEAnchorColorVisited, StringComparison.OrdinalIgnoreCase)) {
return Color.Purple;
}
else if (string.Equals(name, IEAnchorColorHover, StringComparison.OrdinalIgnoreCase)) {
return Color.Red;
}
else {
return Color.Red;
}
}
finally {
System.Security.CodeAccessPermission.RevertAssert();
}
}
public static Color IELinkColor {
get {
if (ielinkColor.IsEmpty) {
ielinkColor = GetIEColor(IEAnchorColor);
}
return ielinkColor;
}
}
public static Color IEActiveLinkColor {
get {
if (ieactiveLinkColor.IsEmpty) {
ieactiveLinkColor = GetIEColor(IEAnchorColorHover);
}
return ieactiveLinkColor;
}
}
public static Color IEVisitedLinkColor {
get {
if (ievisitedLinkColor.IsEmpty) {
ievisitedLinkColor = GetIEColor(IEAnchorColorVisited);
}
return ievisitedLinkColor;
}
}
///
///
/// Retrieves the IE settings for link behavior from the registry.
///
public static LinkBehavior GetIELinkBehavior() {
// SECREVIEW : We are just reading the IE color settings from the registry...
//
// SECUNDONE : This assert doesn't work... assert everything for now...
//
//new RegistryPermission(RegistryPermissionAccess.Read, "HKCU\\" + IEMainRegPath).Assert();
new RegistryPermission(PermissionState.Unrestricted).Assert();
try {
RegistryKey key = Registry.CurrentUser.OpenSubKey(IEMainRegPath);
if (key != null) {
string s = (string)key.GetValue("Anchor Underline");
key.Close();
if (s != null && string.Compare(s, "no", true, CultureInfo.InvariantCulture) == 0) {
return LinkBehavior.NeverUnderline;
}
if (s != null && string.Compare(s, "hover", true, CultureInfo.InvariantCulture) == 0) {
return LinkBehavior.HoverUnderline;
}
else {
return LinkBehavior.AlwaysUnderline;
}
}
}
finally {
System.Security.CodeAccessPermission.RevertAssert();
}
return LinkBehavior.AlwaysUnderline;
}
public static void EnsureLinkFonts(Font baseFont, LinkBehavior link, ref Font linkFont, ref Font hoverLinkFont) {
if (linkFont != null && hoverLinkFont != null) {
return;
}
bool underlineLink = true;
bool underlineHover = true;
if (link == LinkBehavior.SystemDefault) {
link = GetIELinkBehavior();
}
switch (link) {
case LinkBehavior.AlwaysUnderline:
underlineLink = true;
underlineHover = true;
break;
case LinkBehavior.HoverUnderline:
underlineLink = false;
underlineHover = true;
break;
case LinkBehavior.NeverUnderline:
underlineLink = false;
underlineHover = false;
break;
}
Font f = baseFont;
// We optimize for the "same" value (never & always) to avoid creating an
// extra font object.
//
if (underlineHover == underlineLink) {
FontStyle style = f.Style;
if (underlineHover) {
style |= FontStyle.Underline;
}
else {
style &= ~FontStyle.Underline;
}
hoverLinkFont = new Font(f, style);
linkFont = hoverLinkFont;
}
else {
FontStyle hoverStyle = f.Style;
if (underlineHover) {
hoverStyle |= FontStyle.Underline;
}
else {
hoverStyle &= ~FontStyle.Underline;
}
hoverLinkFont = new Font(f, hoverStyle);
FontStyle linkStyle = f.Style;
if (underlineLink) {
linkStyle |= FontStyle.Underline;
}
else {
linkStyle &= ~FontStyle.Underline;
}
linkFont = new Font(f, linkStyle);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- invalidudtexception.cs
- XPathMultyIterator.cs
- HandleInitializationContext.cs
- _MultipleConnectAsync.cs
- BuildProviderAppliesToAttribute.cs
- MobileControlsSectionHandler.cs
- FontCacheLogic.cs
- UserPreferenceChangedEventArgs.cs
- InputElement.cs
- ImageCodecInfoPrivate.cs
- DataServiceConfiguration.cs
- Math.cs
- FontUnitConverter.cs
- MemberProjectionIndex.cs
- TrustSection.cs
- DurableServiceAttribute.cs
- ListSortDescription.cs
- ChannelBinding.cs
- CompositeScriptReferenceEventArgs.cs
- Native.cs
- WebPartZoneBase.cs
- HeaderPanel.cs
- RoleGroupCollection.cs
- unitconverter.cs
- SerializationHelper.cs
- ObjectViewListener.cs
- AlternateViewCollection.cs
- SqlClientWrapperSmiStream.cs
- FieldNameLookup.cs
- SyndicationDeserializer.cs
- TaskFormBase.cs
- SspiSecurityTokenProvider.cs
- DropDownList.cs
- OdbcConnectionPoolProviderInfo.cs
- FileIOPermission.cs
- GroupBox.cs
- EditorPart.cs
- DecoderExceptionFallback.cs
- DataStorage.cs
- GeneratedView.cs
- SqlWebEventProvider.cs
- CdpEqualityComparer.cs
- CodeAttachEventStatement.cs
- TransportContext.cs
- ResourceManager.cs
- HWStack.cs
- UnsignedPublishLicense.cs
- Emitter.cs
- EncoderBestFitFallback.cs
- DefaultEvaluationContext.cs
- ColumnReorderedEventArgs.cs
- DelegateBodyWriter.cs
- BinaryConverter.cs
- RichTextBoxAutomationPeer.cs
- ExpressionVisitorHelpers.cs
- InheritedPropertyChangedEventArgs.cs
- MatrixTransform3D.cs
- DataListItemEventArgs.cs
- GenericFlowSwitchHelper.cs
- ColorMap.cs
- DESCryptoServiceProvider.cs
- SessionStateSection.cs
- DataKey.cs
- SchemaTableColumn.cs
- ClientApiGenerator.cs
- DesignerSerializationVisibilityAttribute.cs
- SortExpressionBuilder.cs
- DoubleLinkListEnumerator.cs
- DiagnosticTraceSource.cs
- InheritanceContextHelper.cs
- DocumentsTrace.cs
- JsonReader.cs
- ObjectDataSourceEventArgs.cs
- XslVisitor.cs
- AsymmetricSignatureDeformatter.cs
- AutoCompleteStringCollection.cs
- InstanceKeyCollisionException.cs
- StylusTip.cs
- ConfigXmlSignificantWhitespace.cs
- Variant.cs
- WorkflowDefinitionDispenser.cs
- ApplicationHost.cs
- AuthenticationServiceManager.cs
- XmlExtensionFunction.cs
- EventSinkHelperWriter.cs
- InlineCategoriesDocument.cs
- Point3DConverter.cs
- RadioButtonAutomationPeer.cs
- ProfileGroupSettingsCollection.cs
- ByteConverter.cs
- ContextStack.cs
- DragEvent.cs
- RuntimeArgumentHandle.cs
- DataControlReference.cs
- MulticastIPAddressInformationCollection.cs
- CommandLibraryHelper.cs
- ExplicitDiscriminatorMap.cs
- PatternMatcher.cs
- DesignerDataParameter.cs
- Documentation.cs