Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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. // //----------------------------------------------------------------------------- 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- LinqToSqlWrapper.cs
- MarkupCompilePass2.cs
- UserPersonalizationStateInfo.cs
- StringWriter.cs
- EdmToObjectNamespaceMap.cs
- MouseBinding.cs
- DataGridViewCellMouseEventArgs.cs
- ExtensionFile.cs
- RelatedEnd.cs
- IPeerNeighbor.cs
- DrawingGroup.cs
- ConfigXmlElement.cs
- GridViewRowEventArgs.cs
- Typeface.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- Closure.cs
- UnsafeNativeMethods.cs
- HttpCacheVary.cs
- EnumerableValidator.cs
- QilExpression.cs
- TraceListeners.cs
- precedingsibling.cs
- BCLDebug.cs
- IdnMapping.cs
- XmlHierarchyData.cs
- VirtualPathProvider.cs
- MethodToken.cs
- Composition.cs
- _SecureChannel.cs
- ContextMenu.cs
- XmlNode.cs
- TemplateBamlRecordReader.cs
- Pen.cs
- Model3DCollection.cs
- SurrogateSelector.cs
- PEFileReader.cs
- CollectionType.cs
- DeferredRunTextReference.cs
- UTF7Encoding.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- RedistVersionInfo.cs
- StringSorter.cs
- TrustLevel.cs
- ThicknessAnimationBase.cs
- SmtpAuthenticationManager.cs
- SubstitutionList.cs
- ThreadExceptionDialog.cs
- WindowsContainer.cs
- ListViewContainer.cs
- XPathException.cs
- GPRECT.cs
- TemplatedWizardStep.cs
- LinkDescriptor.cs
- SqlNamer.cs
- QueryableDataSource.cs
- SelectionManager.cs
- FormViewInsertedEventArgs.cs
- sqlinternaltransaction.cs
- RemotingSurrogateSelector.cs
- isolationinterop.cs
- XmlSerializerSection.cs
- ArglessEventHandlerProxy.cs
- PolyQuadraticBezierSegment.cs
- ConstructorBuilder.cs
- ExpressionEvaluator.cs
- StaticTextPointer.cs
- XPathConvert.cs
- DataGrid.cs
- ExcludePathInfo.cs
- InstrumentationTracker.cs
- TextDecorationLocationValidation.cs
- PasswordTextNavigator.cs
- TextServicesDisplayAttribute.cs
- StrongNameKeyPair.cs
- TextFormatterHost.cs
- StateDesigner.Helpers.cs
- DbReferenceCollection.cs
- ActiveXContainer.cs
- CollectionsUtil.cs
- SessionConnectionReader.cs
- PeerCollaboration.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- ProjectionPlan.cs
- ProtocolsConfigurationEntry.cs
- TextEditorContextMenu.cs
- SmtpAuthenticationManager.cs
- TraceInternal.cs
- iisPickupDirectory.cs
- RegistryPermission.cs
- FragmentQuery.cs
- SoapAttributeAttribute.cs
- EpmCustomContentWriterNodeData.cs
- GraphicsPathIterator.cs
- IISMapPath.cs
- TypeDescriptor.cs
- MultiTargetingUtil.cs
- TextEditorCopyPaste.cs
- TaiwanLunisolarCalendar.cs
- XmlEnumAttribute.cs
- Columns.cs