Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / WinForms / Managed / System / WinForms / MenuStrip.cs / 1 / MenuStrip.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Windows.Forms {
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using System.Windows.Forms.Layout;
///
[ComVisible(true),
ClassInterface(ClassInterfaceType.AutoDispatch),
SRDescription(SR.DescriptionMenuStrip)
]
public class MenuStrip : ToolStrip {
private ToolStripMenuItem mdiWindowListItem = null;
private static readonly object EventMenuActivate = new object();
private static readonly object EventMenuDeactivate = new object();
///
public MenuStrip() {
this.CanOverflow = false;
this.GripStyle = ToolStripGripStyle.Hidden;
this.Stretch = true;
}
internal override bool KeyboardActive {
get { return base.KeyboardActive; }
set {
if (base.KeyboardActive != value) {
base.KeyboardActive = value;
if (value) {
OnMenuActivate(EventArgs.Empty);
}
else {
OnMenuDeactivate(EventArgs.Empty);
}
}
}
}
[
DefaultValue(false),
SRDescription(SR.ToolStripCanOverflowDescr),
SRCategory(SR.CatLayout),
Browsable(false)
]
public new bool CanOverflow {
get {
return base.CanOverflow;
}
set {
base.CanOverflow = value;
}
}
protected override bool DefaultShowItemToolTips {
get {
return false;
}
}
protected override Padding DefaultGripMargin {
get {
// VSWhidbey 448134 - ensure grip aligns properly when set visible.
return new Padding(2, 2, 0, 2);
}
}
///
protected override Size DefaultSize {
get {
return new Size(200, 24);
}
}
protected override Padding DefaultPadding {
get {
// VSWhidbey 448134: scoot the grip over when present
if (GripStyle == ToolStripGripStyle.Visible) {
return new Padding(3, 2, 0, 2);
}
return new Padding(6, 2, 0, 2);
}
}
[DefaultValue(ToolStripGripStyle.Hidden)]
public new ToolStripGripStyle GripStyle {
get {
return base.GripStyle;
}
set {
base.GripStyle = value;
}
}
[SRCategory(SR.CatBehavior), SRDescription(SR.MenuStripMenuActivateDescr)]
public event EventHandler MenuActivate {
add {
Events.AddHandler(EventMenuActivate, value);
}
remove {
Events.RemoveHandler(EventMenuActivate, value);
}
}
[SRCategory(SR.CatBehavior), SRDescription(SR.MenuStripMenuDeactivateDescr)]
public event EventHandler MenuDeactivate {
add {
Events.AddHandler(EventMenuDeactivate, value);
}
remove {
Events.RemoveHandler(EventMenuDeactivate, value);
}
}
[DefaultValue(false)]
[SRDescription(SR.ToolStripShowItemToolTipsDescr)]
[SRCategory(SR.CatBehavior)]
public new bool ShowItemToolTips {
get {
return base.ShowItemToolTips;
}
set {
base.ShowItemToolTips = value;
}
}
[DefaultValue(true)]
[SRCategory(SR.CatLayout)]
[SRDescription(SR.ToolStripStretchDescr)]
public new bool Stretch {
get {
return base.Stretch;
}
set {
base.Stretch = value;
}
}
[DefaultValue(null)]
[MergableProperty(false)]
[SRDescription(SR.MenuStripMdiWindowListItem)]
[SRCategory(SR.CatBehavior)]
[TypeConverterAttribute(typeof(MdiWindowListItemConverter))]
public ToolStripMenuItem MdiWindowListItem {
get {
return mdiWindowListItem;
}
set {
mdiWindowListItem = value;
}
}
///
protected override AccessibleObject CreateAccessibilityInstance() {
return new MenuStripAccessibleObject(this);
}
protected internal override ToolStripItem CreateDefaultItem(string text, Image image, EventHandler onClick) {
if (text == "-") {
return new ToolStripSeparator();
}
else {
return new ToolStripMenuItem(text, image, onClick);
}
}
protected virtual void OnMenuActivate(EventArgs e) {
if (IsHandleCreated) {
AccessibilityNotifyClients(AccessibleEvents.SystemMenuStart, -1);
}
EventHandler handler = (EventHandler)Events[EventMenuActivate];
if (handler != null) handler(this, e);
}
protected virtual void OnMenuDeactivate(EventArgs e) {
if (IsHandleCreated) {
AccessibilityNotifyClients(AccessibleEvents.SystemMenuEnd, -1);
}
EventHandler handler = (EventHandler)Events[EventMenuDeactivate];
if (handler != null) handler(this, e);
}
///
/// Called from ToolStripManager.ProcessMenuKey. Fires MenuActivate event and sets focus.
///
internal bool OnMenuKey() {
if (!(Focused || ContainsFocus)) {
Debug.WriteLineIf(ToolStrip.SnapFocusDebug.TraceVerbose, "[ProcessMenuKey] set focus to menustrip");
ToolStripManager.ModalMenuFilter.SetActiveToolStrip(this, /*menuKeyPressed=*/true);
if (DisplayedItems.Count > 0) {
if (DisplayedItems[0] is MdiControlStrip.SystemMenuItem) {
SelectNextToolStripItem(DisplayedItems[0], /*forward=*/true);
}
else {
// first alt should select "File". Future keydowns of alt should restore focus.
SelectNextToolStripItem(null, /*forward=*/(RightToLeft == RightToLeft.No));
}
}
return true;
}
return false;
}
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
protected override bool ProcessCmdKey(ref Message m, Keys keyData) {
if (ToolStripManager.ModalMenuFilter.InMenuMode) {
// ALT, then space should dismiss the menu and activate the system menu.
if (keyData == Keys.Space) {
// if we're focused it's ok to activate system menu
// if we're not focused - we should not activate if we contain focus - this means a text box or something
// has focus.
if (Focused || !ContainsFocus) {
NotifySelectionChange(null);
Debug.WriteLineIf(ToolStrip.SnapFocusDebug.TraceVerbose, "[MenuStrip.ProcessCmdKey] Rolling up the menu and invoking the system menu");
ToolStripManager.ModalMenuFilter.ExitMenuMode();
// send a WM_SYSCOMMAND SC_KEYMENU + Space to activate the system menu.
UnsafeNativeMethods.PostMessage(WindowsFormsUtils.GetRootHWnd(this), NativeMethods.WM_SYSCOMMAND, NativeMethods.SC_KEYMENU, (int)Keys.Space);
return true;
}
}
}
return base.ProcessCmdKey(ref m, keyData);
}
///
///
/// Summary of WndProc.
///
///
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
protected override void WndProc(ref Message m) {
if (m.Msg == NativeMethods.WM_MOUSEACTIVATE && (ActiveDropDowns.Count == 0)) {
// call menu activate before we actually take focus.
Point pt = PointToClient(WindowsFormsUtils.LastCursorPoint);
ToolStripItem item = GetItemAt(pt);
if (item != null && !(item is ToolStripControlHost)) {
// verify the place where we've clicked is a place where we have to do "fake" focus
// e.g. an item that isnt a control.
KeyboardActive = true;
}
}
base.WndProc(ref m);
}
[System.Runtime.InteropServices.ComVisible(true)]
internal class MenuStripAccessibleObject : ToolStripAccessibleObject {
public MenuStripAccessibleObject(MenuStrip owner)
: base(owner) {
}
public override AccessibleRole Role {
get {
AccessibleRole role = Owner.AccessibleRole;
if (role != AccessibleRole.Default) {
return role;
}
return AccessibleRole.MenuBar;
}
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MetadataArtifactLoaderResource.cs
- NativeCppClassAttribute.cs
- HttpRequestWrapper.cs
- RecoverInstanceLocksCommand.cs
- QueueProcessor.cs
- DataControlImageButton.cs
- PolicyLevel.cs
- EntityDataSourceDesigner.cs
- AutomationProperties.cs
- InvalidStoreProtectionKeyException.cs
- DomainLiteralReader.cs
- InspectionWorker.cs
- AppSettingsExpressionEditor.cs
- StringResourceManager.cs
- ImplicitInputBrush.cs
- BypassElementCollection.cs
- XmlWellformedWriter.cs
- OpenFileDialog.cs
- CodeCatchClauseCollection.cs
- AlphaSortedEnumConverter.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- SettingsBase.cs
- ViewEventArgs.cs
- Rotation3DKeyFrameCollection.cs
- CodeIdentifier.cs
- FormViewUpdatedEventArgs.cs
- DataGridAddNewRow.cs
- ImportRequest.cs
- NaturalLanguageHyphenator.cs
- StrokeNode.cs
- httpserverutility.cs
- OdbcCommand.cs
- SrgsItemList.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- ButtonStandardAdapter.cs
- SecUtil.cs
- shaperfactory.cs
- GroupBoxAutomationPeer.cs
- WindowsImpersonationContext.cs
- GraphicsContext.cs
- Vector.cs
- StatusBarItemAutomationPeer.cs
- DynamicMethod.cs
- BuildProvider.cs
- HostProtectionException.cs
- AsymmetricSecurityProtocolFactory.cs
- CodeGen.cs
- SubclassTypeValidatorAttribute.cs
- DataGridViewHeaderCell.cs
- FontFamilyConverter.cs
- TargetControlTypeCache.cs
- DataContractJsonSerializer.cs
- CuspData.cs
- PersonalizationStateInfoCollection.cs
- SchemaImporterExtensionElement.cs
- ReadOnlyPropertyMetadata.cs
- WindowsPrincipal.cs
- SafeNativeMethods.cs
- DispatcherExceptionFilterEventArgs.cs
- DefaultMemberAttribute.cs
- EnvelopeVersion.cs
- MissingFieldException.cs
- DataTablePropertyDescriptor.cs
- WebScriptMetadataInstanceContextProvider.cs
- behaviorssection.cs
- FormViewCommandEventArgs.cs
- BinaryParser.cs
- Solver.cs
- WindowsIdentity.cs
- QueryHandler.cs
- _HelperAsyncResults.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- EditorZoneAutoFormat.cs
- PropertyManager.cs
- DataGridCaption.cs
- TreeBuilder.cs
- CodeDomExtensionMethods.cs
- AssemblyUtil.cs
- WebFormsRootDesigner.cs
- XhtmlCssHandler.cs
- BrowserCapabilitiesCompiler.cs
- DependencySource.cs
- LessThan.cs
- UIElementAutomationPeer.cs
- ViewGenResults.cs
- PrintDocument.cs
- SpecialNameAttribute.cs
- WebPartEditVerb.cs
- WpfGeneratedKnownProperties.cs
- SqlAliaser.cs
- MemoryStream.cs
- PersonalizationAdministration.cs
- TypeLoader.cs
- EnumBuilder.cs
- ValidationError.cs
- UpDownEvent.cs
- ShapingWorkspace.cs
- DirectoryInfo.cs
- _CookieModule.cs
- XomlDesignerLoader.cs