Code:
/ DotNET / DotNET / 8.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
- GridItem.cs
- BatchParser.cs
- ProtocolsConfiguration.cs
- CodeLinePragma.cs
- StreamInfo.cs
- StoragePropertyMapping.cs
- XmlnsCompatibleWithAttribute.cs
- EntityWrapperFactory.cs
- ChtmlFormAdapter.cs
- XsdDataContractExporter.cs
- DataGridViewColumnTypePicker.cs
- latinshape.cs
- Peer.cs
- Fonts.cs
- DataKeyArray.cs
- FunctionOverloadResolver.cs
- XmlElement.cs
- EncoderExceptionFallback.cs
- InvokeWebService.cs
- ItemsPanelTemplate.cs
- AtomicFile.cs
- WebServicesDescriptionAttribute.cs
- TextServicesDisplayAttributePropertyRanges.cs
- SectionXmlInfo.cs
- ToolZoneDesigner.cs
- EntityDataSourceViewSchema.cs
- SafeHandle.cs
- Processor.cs
- TreeWalkHelper.cs
- ErrorFormatterPage.cs
- IPPacketInformation.cs
- Component.cs
- DeferrableContent.cs
- ScriptServiceAttribute.cs
- DbConvert.cs
- AstTree.cs
- UpdateException.cs
- LabelLiteral.cs
- METAHEADER.cs
- ProxyDataContractResolver.cs
- baseshape.cs
- StrongNameIdentityPermission.cs
- ExternalFile.cs
- IssuedTokenParametersElement.cs
- BindingExpressionBase.cs
- ResXBuildProvider.cs
- CodeCompiler.cs
- FileNameEditor.cs
- __Filters.cs
- ChangeProcessor.cs
- TextSchema.cs
- HttpHeaderCollection.cs
- Single.cs
- Command.cs
- StrongName.cs
- SchemaImporterExtension.cs
- AdornerLayer.cs
- ListBoxItemAutomationPeer.cs
- DynamicValueConverter.cs
- DefaultEventAttribute.cs
- WebControlToolBoxItem.cs
- SqlCaseSimplifier.cs
- PlacementWorkspace.cs
- TextDecorationCollectionConverter.cs
- AggregationMinMaxHelpers.cs
- StylusPointProperty.cs
- StorageTypeMapping.cs
- TransactionScope.cs
- ResourceWriter.cs
- ScriptRegistrationManager.cs
- HtmlGenericControl.cs
- DataGridAddNewRow.cs
- PerfService.cs
- XmlTextReaderImplHelpers.cs
- GridViewPageEventArgs.cs
- ReadOnlyPropertyMetadata.cs
- SourceLineInfo.cs
- SolidColorBrush.cs
- oledbmetadatacollectionnames.cs
- ToolStripDropDownMenu.cs
- ItemCollection.cs
- TCEAdapterGenerator.cs
- Serializer.cs
- StorageMappingItemLoader.cs
- FixedSOMLineRanges.cs
- PagesChangedEventArgs.cs
- BamlRecordReader.cs
- FileReservationCollection.cs
- BeginStoryboard.cs
- UniqueEventHelper.cs
- ResXResourceWriter.cs
- MeshGeometry3D.cs
- PageContent.cs
- TreeViewItem.cs
- Qualifier.cs
- ReverseInheritProperty.cs
- ConfigurationManagerHelperFactory.cs
- ServiceContractGenerator.cs
- SafeArrayTypeMismatchException.cs
- ExpressionVisitor.cs