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
- TdsParserSafeHandles.cs
- ScriptResourceHandler.cs
- DbConnectionStringCommon.cs
- XamlLoadErrorInfo.cs
- CompilationUnit.cs
- ContextQuery.cs
- GenericTypeParameterBuilder.cs
- HierarchicalDataBoundControl.cs
- MaskedTextBox.cs
- InkCollectionBehavior.cs
- SurrogateChar.cs
- SequenceQuery.cs
- MethodToken.cs
- altserialization.cs
- BinaryObjectReader.cs
- FactorySettingsElement.cs
- Context.cs
- SiteMapNodeCollection.cs
- Ray3DHitTestResult.cs
- SchemaTableOptionalColumn.cs
- LinkConverter.cs
- Compiler.cs
- MediaElementAutomationPeer.cs
- ExpressionBinding.cs
- BidPrivateBase.cs
- activationcontext.cs
- KoreanCalendar.cs
- UpdateException.cs
- GenericWebPart.cs
- MultiView.cs
- PropertyEntry.cs
- BitmapEffectrendercontext.cs
- _NegotiateClient.cs
- SpoolingTaskBase.cs
- ControlAdapter.cs
- PerformanceCounterManager.cs
- AdornerLayer.cs
- AssemblyContextControlItem.cs
- srgsitem.cs
- TimeoutValidationAttribute.cs
- DefaultValueConverter.cs
- EmptyReadOnlyDictionaryInternal.cs
- HttpProfileBase.cs
- RestHandlerFactory.cs
- TagMapCollection.cs
- BrowserDefinition.cs
- ImmutableObjectAttribute.cs
- ProfileEventArgs.cs
- MessageBox.cs
- TargetParameterCountException.cs
- DesignerDataColumn.cs
- WebCategoryAttribute.cs
- WmlValidatorAdapter.cs
- GeneralTransform3DTo2DTo3D.cs
- WebPartDeleteVerb.cs
- PassportIdentity.cs
- EncryptedPackage.cs
- JavaScriptString.cs
- ManagementClass.cs
- XmlDocumentFieldSchema.cs
- ServiceMemoryGates.cs
- ArgIterator.cs
- CodeComment.cs
- Byte.cs
- XPathItem.cs
- FormatterServices.cs
- Repeater.cs
- EnumUnknown.cs
- X509CertificateCollection.cs
- EventLogEntryCollection.cs
- RsaElement.cs
- TreeNodeBinding.cs
- ValidationErrorEventArgs.cs
- ReflectEventDescriptor.cs
- DesignerListAdapter.cs
- ContractValidationHelper.cs
- RuntimeHelpers.cs
- SafeCertificateStore.cs
- SamlDoNotCacheCondition.cs
- base64Transforms.cs
- ImageCollectionCodeDomSerializer.cs
- Point.cs
- IDReferencePropertyAttribute.cs
- HtmlFormWrapper.cs
- BookmarkNameHelper.cs
- RegexMatchCollection.cs
- Hex.cs
- SetIndexBinder.cs
- Permission.cs
- WebEncodingValidatorAttribute.cs
- DrawingServices.cs
- PeerContact.cs
- CombinedGeometry.cs
- AttachmentCollection.cs
- SubpageParagraph.cs
- WebConfigurationHost.cs
- DateTimeFormatInfoScanner.cs
- BinaryObjectReader.cs
- FileDataSource.cs
- BindingsCollection.cs