Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / UIAutomation / Win32Providers / MS / Internal / AutomationProxies / WindowsHyperlink.cs / 1305600 / WindowsHyperlink.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: Windows Hyperlink Proxy // // History: // 07/01/2003 : a-jeanp Created //--------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; using System.ComponentModel; using System.Text; using System.Collections; using System.Windows.Automation; using System.Windows.Automation.Provider; using System.Windows; using MS.Win32; namespace MS.Internal.AutomationProxies { // Implementation of the Hyperlink (SysLink) proxy. class WindowsHyperlink: ProxyHwnd { // ----------------------------------------------------- // // Constructors // // ----------------------------------------------------- #region Constructors WindowsHyperlink (IntPtr hwnd, ProxyFragment parent, int item) : base( hwnd, parent, item) { // Set the strings to return properly the properties. _cControlType = ControlType.Hyperlink; // support for events _createOnEvent = new WinEventTracker.ProxyRaiseEvents(RaiseEvents); } #endregion Constructors #region Proxy Create // Static Create method called by UIAutomation to create this proxy. //= 0 && GetLinkItem (HitTestInfo.item.iLink)) { return CreateHyperlinkItem (_linkItem, HitTestInfo.item.iLink); } return base.ElementProviderFromPoint (x, y); } // Returns an item corresponding to the focused element (if there is one), // or null otherwise. internal override ProxySimple GetFocus () { // // @ for (int iCurrentItem = 0; GetLinkItem(iCurrentItem); iCurrentItem++) { // If the item was focused... if (Misc.IsBitSet(_linkItem.state, NativeMethods.LIS_FOCUSED)) { return CreateHyperlinkItem(_linkItem, iCurrentItem); } } return null; } #endregion ProxyFragment Interface // ------------------------------------------------------ // // Private Methods // // ------------------------------------------------------ #region Private Methods // Copy creator for a link or link item. private ProxySimple CreateHyperlinkItem(UnsafeNativeMethods.LITEM linkItem, int index) { return new WindowsHyperlinkItem(_hwnd, this, index); } private bool GetLinkItem (int item) { if (item < 0) { return false; } // Set the members about which we care. _linkItem.mask = NativeMethods.LIF_ITEMINDEX | NativeMethods.LIF_STATE; _linkItem.iLink = item; _linkItem.state = 0; _linkItem.stateMask = NativeMethods.LIS_ENABLED; unsafe { fixed (UnsafeNativeMethods.LITEM* pLinkItem = &_linkItem) { return XSendMessage.XSend(_hwnd, NativeMethods.LM_GETITEM, IntPtr.Zero, new IntPtr(pLinkItem), sizeof(UnsafeNativeMethods.LITEM)); } } } private string RemoveHTMLAnchorTag(string text) { // If there are no anchor tag then it's ok just return it if (text.IndexOf("') { inAnchorMode = false; } } return new string(ach, 0, dest); } #endregion Private Methods // ----------------------------------------------------- // // Private Fields // // ------------------------------------------------------ #region Private Fields // Temporary variable used all over the proxy private UnsafeNativeMethods.LITEM _linkItem; #endregion Private Fields } // ----------------------------------------------------- // // WindowsHyperlinkItem Class // //----------------------------------------------------- // Implementation of the PAW WindowsHyperlinkItem (SysLink) proxy. class WindowsHyperlinkItem : ProxySimple, IInvokeProvider { // ----------------------------------------------------- // // Constructors // // ------------------------------------------------------ #region Constructors // Constructor. internal WindowsHyperlinkItem(IntPtr hwnd, ProxyFragment parent, int item) : base( hwnd, parent, item) { // Set the strings to return properly the properties. _cControlType = ControlType.Hyperlink; } #endregion Constructors //----------------------------------------------------- // // Patterns Implementation // //------------------------------------------------------ #region ProxySimple Interface // Returns a pattern interface if supported. internal override object GetPatternProvider(AutomationPattern iid) { return iid == InvokePattern.Pattern ? this : null; } // Sets the focus to this item. internal override bool SetFocus() { // // Send the link an LM_SETITEM message. // // Allocate a local LITEM struct. UnsafeNativeMethods.LITEM linkItem = new UnsafeNativeMethods.LITEM(); // Fill in the coordinates about which we care. linkItem.mask = NativeMethods.LIF_ITEMINDEX | NativeMethods.LIF_STATE; linkItem.iLink = _item; linkItem.stateMask = NativeMethods.LIS_FOCUSED; linkItem.state = NativeMethods.LIS_FOCUSED; unsafe { // Send the LM_SETITEM message. return XSendMessage.XSend(_hwnd, NativeMethods.LM_SETITEM, IntPtr.Zero, new IntPtr(&linkItem), Marshal.SizeOf(linkItem.GetType())); } } //Gets the localized name internal override string LocalizedName { get { // Cannot get the associated with each each hyperlink (within ) return ""; } } #endregion ProxySimple Interface #region Invoke Pattern // Same as clicking on an hyperlink void IInvokeProvider.Invoke() { // Check that button can be clicked. // // @ // Make sure that the control is enabled if (!SafeNativeMethods.IsWindowEnabled(_hwnd)) { throw new ElementNotEnabledException(); } if (!SafeNativeMethods.IsWindowVisible(_hwnd)) { throw new InvalidOperationException(SR.Get(SRID.OperationCannotBePerformed)); } // // Get the bounding rect for the window. // NativeMethods.Win32Rect BoundingRect = NativeMethods.Win32Rect.Empty; if (!Misc.GetWindowRect(_hwnd, ref BoundingRect)) { return; } // // All we really need here are the height and the width, // so we don't even need to translate between screen // and client coordinates. // int width = BoundingRect.right - BoundingRect.left; int height = BoundingRect.bottom - BoundingRect.top; // // Determine the point to click. // // @ for (int Resolution = 10; Resolution > 0; --Resolution) { for (int x = 1; x <= width; x += Resolution) { for (int y = 1; y <= height; y += Resolution) { // // Send the link an LM_HITTEST message. // // Allocate a local hit test info struct. UnsafeNativeMethods.LHITTESTINFO HitTestInfo = new UnsafeNativeMethods.LHITTESTINFO(); // Fill in the coordinates that we want to check. HitTestInfo.pt.x = x; HitTestInfo.pt.y = y; // Fill in index and state info. HitTestInfo.item.mask = NativeMethods.LIF_ITEMINDEX | NativeMethods.LIF_STATE; HitTestInfo.item.iLink = 0; HitTestInfo.item.stateMask = NativeMethods.LIS_ENABLED; HitTestInfo.item.state = 0; bool bGetItemResult; unsafe { // Send the LM_HITTEST message. bGetItemResult = XSendMessage.XSend(_hwnd, NativeMethods.LM_HITTEST, IntPtr.Zero, new IntPtr(&HitTestInfo), Marshal.SizeOf(HitTestInfo.GetType())); } if (bGetItemResult == true && HitTestInfo.item.iLink == _item) { // // N.B. [SEdmison]: // This multiplication is essentially just // a left shift by one word's width; in // Win32 I'd just use my trusty MAKELONG macro, // but C# doesn't give me that option. // Misc.ProxySendMessage(_hwnd, NativeMethods.WM_LBUTTONDOWN, IntPtr.Zero, NativeMethods.Util.MAKELPARAM(x, y)); Misc.ProxySendMessage(_hwnd, NativeMethods.WM_LBUTTONUP, IntPtr.Zero, NativeMethods.Util.MAKELPARAM(x, y)); return; } } } } } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // // Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: Windows Hyperlink Proxy // // History: // 07/01/2003 : a-jeanp Created //--------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; using System.ComponentModel; using System.Text; using System.Collections; using System.Windows.Automation; using System.Windows.Automation.Provider; using System.Windows; using MS.Win32; namespace MS.Internal.AutomationProxies { // Implementation of the Hyperlink (SysLink) proxy. class WindowsHyperlink: ProxyHwnd { // ----------------------------------------------------- // // Constructors // // ----------------------------------------------------- #region Constructors WindowsHyperlink (IntPtr hwnd, ProxyFragment parent, int item) : base( hwnd, parent, item) { // Set the strings to return properly the properties. _cControlType = ControlType.Hyperlink; // support for events _createOnEvent = new WinEventTracker.ProxyRaiseEvents(RaiseEvents); } #endregion Constructors #region Proxy Create // Static Create method called by UIAutomation to create this proxy. //= 0 && GetLinkItem (HitTestInfo.item.iLink)) { return CreateHyperlinkItem (_linkItem, HitTestInfo.item.iLink); } return base.ElementProviderFromPoint (x, y); } // Returns an item corresponding to the focused element (if there is one), // or null otherwise. internal override ProxySimple GetFocus () { // // @ for (int iCurrentItem = 0; GetLinkItem(iCurrentItem); iCurrentItem++) { // If the item was focused... if (Misc.IsBitSet(_linkItem.state, NativeMethods.LIS_FOCUSED)) { return CreateHyperlinkItem(_linkItem, iCurrentItem); } } return null; } #endregion ProxyFragment Interface // ------------------------------------------------------ // // Private Methods // // ------------------------------------------------------ #region Private Methods // Copy creator for a link or link item. private ProxySimple CreateHyperlinkItem(UnsafeNativeMethods.LITEM linkItem, int index) { return new WindowsHyperlinkItem(_hwnd, this, index); } private bool GetLinkItem (int item) { if (item < 0) { return false; } // Set the members about which we care. _linkItem.mask = NativeMethods.LIF_ITEMINDEX | NativeMethods.LIF_STATE; _linkItem.iLink = item; _linkItem.state = 0; _linkItem.stateMask = NativeMethods.LIS_ENABLED; unsafe { fixed (UnsafeNativeMethods.LITEM* pLinkItem = &_linkItem) { return XSendMessage.XSend(_hwnd, NativeMethods.LM_GETITEM, IntPtr.Zero, new IntPtr(pLinkItem), sizeof(UnsafeNativeMethods.LITEM)); } } } private string RemoveHTMLAnchorTag(string text) { // If there are no anchor tag then it's ok just return it if (text.IndexOf("') { inAnchorMode = false; } } return new string(ach, 0, dest); } #endregion Private Methods // ----------------------------------------------------- // // Private Fields // // ------------------------------------------------------ #region Private Fields // Temporary variable used all over the proxy private UnsafeNativeMethods.LITEM _linkItem; #endregion Private Fields } // ----------------------------------------------------- // // WindowsHyperlinkItem Class // //----------------------------------------------------- // Implementation of the PAW WindowsHyperlinkItem (SysLink) proxy. class WindowsHyperlinkItem : ProxySimple, IInvokeProvider { // ----------------------------------------------------- // // Constructors // // ------------------------------------------------------ #region Constructors // Constructor. internal WindowsHyperlinkItem(IntPtr hwnd, ProxyFragment parent, int item) : base( hwnd, parent, item) { // Set the strings to return properly the properties. _cControlType = ControlType.Hyperlink; } #endregion Constructors //----------------------------------------------------- // // Patterns Implementation // //------------------------------------------------------ #region ProxySimple Interface // Returns a pattern interface if supported. internal override object GetPatternProvider(AutomationPattern iid) { return iid == InvokePattern.Pattern ? this : null; } // Sets the focus to this item. internal override bool SetFocus() { // // Send the link an LM_SETITEM message. // // Allocate a local LITEM struct. UnsafeNativeMethods.LITEM linkItem = new UnsafeNativeMethods.LITEM(); // Fill in the coordinates about which we care. linkItem.mask = NativeMethods.LIF_ITEMINDEX | NativeMethods.LIF_STATE; linkItem.iLink = _item; linkItem.stateMask = NativeMethods.LIS_FOCUSED; linkItem.state = NativeMethods.LIS_FOCUSED; unsafe { // Send the LM_SETITEM message. return XSendMessage.XSend(_hwnd, NativeMethods.LM_SETITEM, IntPtr.Zero, new IntPtr(&linkItem), Marshal.SizeOf(linkItem.GetType())); } } //Gets the localized name internal override string LocalizedName { get { // Cannot get the associated with each each hyperlink (within ) return ""; } } #endregion ProxySimple Interface #region Invoke Pattern // Same as clicking on an hyperlink void IInvokeProvider.Invoke() { // Check that button can be clicked. // // @ // Make sure that the control is enabled if (!SafeNativeMethods.IsWindowEnabled(_hwnd)) { throw new ElementNotEnabledException(); } if (!SafeNativeMethods.IsWindowVisible(_hwnd)) { throw new InvalidOperationException(SR.Get(SRID.OperationCannotBePerformed)); } // // Get the bounding rect for the window. // NativeMethods.Win32Rect BoundingRect = NativeMethods.Win32Rect.Empty; if (!Misc.GetWindowRect(_hwnd, ref BoundingRect)) { return; } // // All we really need here are the height and the width, // so we don't even need to translate between screen // and client coordinates. // int width = BoundingRect.right - BoundingRect.left; int height = BoundingRect.bottom - BoundingRect.top; // // Determine the point to click. // // @ for (int Resolution = 10; Resolution > 0; --Resolution) { for (int x = 1; x <= width; x += Resolution) { for (int y = 1; y <= height; y += Resolution) { // // Send the link an LM_HITTEST message. // // Allocate a local hit test info struct. UnsafeNativeMethods.LHITTESTINFO HitTestInfo = new UnsafeNativeMethods.LHITTESTINFO(); // Fill in the coordinates that we want to check. HitTestInfo.pt.x = x; HitTestInfo.pt.y = y; // Fill in index and state info. HitTestInfo.item.mask = NativeMethods.LIF_ITEMINDEX | NativeMethods.LIF_STATE; HitTestInfo.item.iLink = 0; HitTestInfo.item.stateMask = NativeMethods.LIS_ENABLED; HitTestInfo.item.state = 0; bool bGetItemResult; unsafe { // Send the LM_HITTEST message. bGetItemResult = XSendMessage.XSend(_hwnd, NativeMethods.LM_HITTEST, IntPtr.Zero, new IntPtr(&HitTestInfo), Marshal.SizeOf(HitTestInfo.GetType())); } if (bGetItemResult == true && HitTestInfo.item.iLink == _item) { // // N.B. [SEdmison]: // This multiplication is essentially just // a left shift by one word's width; in // Win32 I'd just use my trusty MAKELONG macro, // but C# doesn't give me that option. // Misc.ProxySendMessage(_hwnd, NativeMethods.WM_LBUTTONDOWN, IntPtr.Zero, NativeMethods.Util.MAKELPARAM(x, y)); Misc.ProxySendMessage(_hwnd, NativeMethods.WM_LBUTTONUP, IntPtr.Zero, NativeMethods.Util.MAKELPARAM(x, y)); return; } } } } } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ImageCodecInfoPrivate.cs
- StorageModelBuildProvider.cs
- URL.cs
- EntityContainerEmitter.cs
- DesignTimeTemplateParser.cs
- FormViewPagerRow.cs
- RelationshipNavigation.cs
- XsltContext.cs
- BrowserDefinitionCollection.cs
- MarshalByRefObject.cs
- XslTransformFileEditor.cs
- UpWmlPageAdapter.cs
- TripleDESCryptoServiceProvider.cs
- ThreadStartException.cs
- XpsFilter.cs
- InternalRelationshipCollection.cs
- CustomAttribute.cs
- _Rfc2616CacheValidators.cs
- VerbConverter.cs
- SafeFindHandle.cs
- RadioButtonBaseAdapter.cs
- ServiceDescriptionContext.cs
- AttributedMetaModel.cs
- RuleAttributes.cs
- _ListenerResponseStream.cs
- ValidationSummaryDesigner.cs
- AssertSection.cs
- ToolZoneDesigner.cs
- MailWriter.cs
- DataGrid.cs
- NameValueCollection.cs
- SqlEnums.cs
- OrderByQueryOptionExpression.cs
- Size.cs
- MinMaxParagraphWidth.cs
- __ConsoleStream.cs
- StackSpiller.cs
- FormClosedEvent.cs
- SqlUtils.cs
- NotSupportedException.cs
- NativeCppClassAttribute.cs
- RelationshipManager.cs
- BasicHttpBindingCollectionElement.cs
- HttpChannelBindingToken.cs
- MonikerBuilder.cs
- MatrixCamera.cs
- SiteMapPath.cs
- ApplicationHost.cs
- Encoding.cs
- GeometryDrawing.cs
- XmlWriter.cs
- ImageListStreamer.cs
- SqlUserDefinedTypeAttribute.cs
- EnumUnknown.cs
- GraphicsPath.cs
- HttpResponse.cs
- HandleExceptionArgs.cs
- TabRenderer.cs
- TCEAdapterGenerator.cs
- DocumentPage.cs
- WebPartConnectionsConnectVerb.cs
- SizeConverter.cs
- TdsParserHelperClasses.cs
- ImageMapEventArgs.cs
- QilTernary.cs
- SwitchAttribute.cs
- DBConcurrencyException.cs
- _ServiceNameStore.cs
- CheckPair.cs
- EventLogPermission.cs
- ContractUtils.cs
- KnowledgeBase.cs
- XmlNode.cs
- input.cs
- InkCanvasAutomationPeer.cs
- HtmlInputHidden.cs
- FrameworkElementAutomationPeer.cs
- WebBrowserDocumentCompletedEventHandler.cs
- ListenerConnectionModeReader.cs
- DotAtomReader.cs
- XmlSchemaValidator.cs
- ping.cs
- Point3DIndependentAnimationStorage.cs
- EventListener.cs
- securitycriticaldataformultiplegetandset.cs
- FormParameter.cs
- Debugger.cs
- ParamArrayAttribute.cs
- SessionEndingEventArgs.cs
- ConfigurationManagerInternalFactory.cs
- ActivityDesigner.cs
- WebPartVerbCollection.cs
- ProcessProtocolHandler.cs
- NonBatchDirectoryCompiler.cs
- HeaderedItemsControl.cs
- NavigationPropertyEmitter.cs
- Win32PrintDialog.cs
- UserMapPath.cs
- TableRowGroup.cs
- GenericPrincipal.cs