Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / UIAutomation / Win32Providers / MS / Internal / AutomationProxies / WindowsGrip.cs / 1305600 / WindowsGrip.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: Windows Button Proxy
//
// History:
// 07/01/2003 : preid Created
//---------------------------------------------------------------------------
using System;
using System.Collections;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Automation;
using System.Windows.Automation.Provider;
using System.ComponentModel;
using MS.Win32;
namespace MS.Internal.AutomationProxies
{
class WindowsGrip: ProxyFragment
{
// -----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
public WindowsGrip (IntPtr hwnd, ProxyHwnd parent, int item)
: base( hwnd, parent, item)
{
_sType = ST.Get(STID.LocalizedControlTypeGrip);
_sAutomationId = "Window.Grip"; // This string is a non-localizable string
}
#endregion
//------------------------------------------------------
//
// Patterns Implementation
//
//-----------------------------------------------------
#region ProxySimple Interface
///
/// Gets the bounding rectangle for this element
///
internal override Rect BoundingRectangle
{
get
{
if (IsGripPresent(_hwnd, false))
{
NativeMethods.Win32Rect client = new NativeMethods.Win32Rect();
if (Misc.GetClientRectInScreenCoordinates(_hwnd, ref client))
{
NativeMethods.SIZE sizeGrip = GetGripSize(_hwnd, false);
if (Misc.IsLayoutRTL(_hwnd))
{
return new Rect(client.left - sizeGrip.cx, client.bottom, sizeGrip.cx, sizeGrip.cy);
}
else
{
return new Rect(client.right, client.bottom, sizeGrip.cx, sizeGrip.cy);
}
}
}
return Rect.Empty;
}
}
#endregion
//------------------------------------------------------
//
// Internal Methods
//
//------------------------------------------------------
#region Internal Methods
static internal bool IsGripPresent(IntPtr hwnd, bool onStatusBar)
{
NativeMethods.Win32Rect client = new NativeMethods.Win32Rect();
if (!Misc.GetClientRectInScreenCoordinates(hwnd, ref client))
{
return false;
}
// According to the documentation of GetClientRect, the left and top members are zero. So if
// they are negitive the control must be minimized, therefore the grip is not present.
if (client.left < 0 && client.top < 0 )
{
return false;
}
NativeMethods.SIZE sizeGrip = GetGripSize(hwnd, onStatusBar);
if (!onStatusBar)
{
// When not on a status bar the grip should be out side of the client area.
sizeGrip.cx *= -1;
sizeGrip.cy *= -1;
}
if (Misc.IsLayoutRTL(hwnd))
{
int x = client.left + (int)(sizeGrip.cx / 2);
int y = client.bottom - (int)(sizeGrip.cy / 2);
int hit = Misc.ProxySendMessageInt(hwnd, NativeMethods.WM_NCHITTEST, IntPtr.Zero, NativeMethods.Util.MAKELPARAM(x, y));
return hit == NativeMethods.HTBOTTOMLEFT;
}
else
{
int x = client.right - (int)(sizeGrip.cx / 2);
int y = client.bottom - (int)(sizeGrip.cy / 2);
int hit = Misc.ProxySendMessageInt(hwnd, NativeMethods.WM_NCHITTEST, IntPtr.Zero, NativeMethods.Util.MAKELPARAM(x, y));
return hit == NativeMethods.HTBOTTOMRIGHT;
}
}
internal static NativeMethods.SIZE GetGripSize(IntPtr hwnd, bool onStatusBar)
{
using (ThemePart themePart = new ThemePart(hwnd, onStatusBar ? "STATUS" : "SCROLLBAR"))
{
return themePart.Size(onStatusBar ? (int)ThemePart.STATUSPARTS.SP_GRIPPER : (int)ThemePart.SCROLLBARPARTS.SBP_SIZEBOX, 0);
}
}
#endregion
}
}
// 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
- ReachSerializableProperties.cs
- TabControl.cs
- ComboBox.cs
- WorkflowOperationAsyncResult.cs
- ExtensionSurface.cs
- TrackingMemoryStreamFactory.cs
- XMLDiffLoader.cs
- DataTemplateSelector.cs
- AutoGeneratedField.cs
- EncryptedPackageFilter.cs
- EventWaitHandle.cs
- ImageProxy.cs
- Funcletizer.cs
- FontNamesConverter.cs
- Bezier.cs
- NavigationWindowAutomationPeer.cs
- COM2DataTypeToManagedDataTypeConverter.cs
- SqlInternalConnectionTds.cs
- Validator.cs
- IItemProperties.cs
- ACL.cs
- PersistChildrenAttribute.cs
- SystemIcons.cs
- AudioException.cs
- SmtpLoginAuthenticationModule.cs
- RegionData.cs
- TransformValueSerializer.cs
- WebResponse.cs
- DependencyPropertyValueSerializer.cs
- XPathQilFactory.cs
- FixedSOMTableCell.cs
- MSAAEventDispatcher.cs
- Material.cs
- KeyBinding.cs
- XmlSchemaAnyAttribute.cs
- BadImageFormatException.cs
- PackageProperties.cs
- RegexRunnerFactory.cs
- Metadata.cs
- assemblycache.cs
- HttpDictionary.cs
- ContractsBCL.cs
- RunWorkerCompletedEventArgs.cs
- ApplicationFileParser.cs
- Calendar.cs
- ListBindingHelper.cs
- AsymmetricKeyExchangeDeformatter.cs
- CompiledQueryCacheEntry.cs
- PictureBox.cs
- Options.cs
- SizeKeyFrameCollection.cs
- _NestedSingleAsyncResult.cs
- NonVisualControlAttribute.cs
- AnnotationResourceCollection.cs
- _DomainName.cs
- CfgRule.cs
- Pts.cs
- connectionpool.cs
- Light.cs
- BatchStream.cs
- PhysicalFontFamily.cs
- Stack.cs
- PropertyGridEditorPart.cs
- CallSiteOps.cs
- WebControlAdapter.cs
- IUnknownConstantAttribute.cs
- AddressHeaderCollectionElement.cs
- ObjectParameter.cs
- MouseDevice.cs
- MulticastIPAddressInformationCollection.cs
- InputLangChangeEvent.cs
- CacheEntry.cs
- ILGenerator.cs
- SettingsBase.cs
- UserControlDocumentDesigner.cs
- KnownBoxes.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- HashSetEqualityComparer.cs
- PropertyKey.cs
- FileChangeNotifier.cs
- MenuItemBinding.cs
- TextParagraph.cs
- HtmlInputPassword.cs
- DrawTreeNodeEventArgs.cs
- XmlWriterTraceListener.cs
- WorkflowServiceAttributesTypeConverter.cs
- ListBox.cs
- BinaryCommonClasses.cs
- CompiledQueryCacheKey.cs
- DebugView.cs
- SchemaMerger.cs
- XamlSerializerUtil.cs
- HttpRequestWrapper.cs
- PersonalizationStateInfoCollection.cs
- XmlNodeChangedEventManager.cs
- DataGridColumnEventArgs.cs
- LoadedEvent.cs
- NamespaceInfo.cs
- ConsumerConnectionPoint.cs
- ManipulationStartedEventArgs.cs