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
- PrimitiveSchema.cs
- EventProviderBase.cs
- Compiler.cs
- EFTableProvider.cs
- FocusChangedEventArgs.cs
- BitmapScalingModeValidation.cs
- InkPresenter.cs
- WsdlBuildProvider.cs
- MimeReflector.cs
- QilParameter.cs
- UnmanagedBitmapWrapper.cs
- DateTimeFormatInfo.cs
- XmlSchemaAnyAttribute.cs
- SpeechRecognizer.cs
- LineGeometry.cs
- regiisutil.cs
- SessionIDManager.cs
- SHA384.cs
- WorkingDirectoryEditor.cs
- BeginEvent.cs
- XPathNode.cs
- StylusEventArgs.cs
- FileDialog_Vista_Interop.cs
- DateTimeConstantAttribute.cs
- NumericExpr.cs
- CollectionConverter.cs
- ResXDataNode.cs
- ObsoleteAttribute.cs
- CommonDialog.cs
- srgsitem.cs
- PostBackTrigger.cs
- XmlSchemaExternal.cs
- AllMembershipCondition.cs
- GeometryDrawing.cs
- ThreadExceptionDialog.cs
- CodeSnippetExpression.cs
- PolygonHotSpot.cs
- ServiceNameElement.cs
- XmlSerializerVersionAttribute.cs
- ExpressionVisitorHelpers.cs
- wgx_sdk_version.cs
- WebBrowserNavigatingEventHandler.cs
- TdsParserSessionPool.cs
- TextEditorSpelling.cs
- RepeatButtonAutomationPeer.cs
- ToolStripScrollButton.cs
- SvcMapFile.cs
- UnicodeEncoding.cs
- OdbcError.cs
- TraceHandler.cs
- RequestCachePolicyConverter.cs
- DataConnectionHelper.cs
- InternalDispatchObject.cs
- SQLStringStorage.cs
- XmlSerializationGeneratedCode.cs
- ConstraintEnumerator.cs
- AutomationElement.cs
- Pair.cs
- InfoCardProofToken.cs
- EntityEntry.cs
- XmlCDATASection.cs
- Underline.cs
- SHA1Managed.cs
- ListCollectionView.cs
- TranslateTransform.cs
- WebPartAddingEventArgs.cs
- PermissionListSet.cs
- ControlBuilderAttribute.cs
- XPathPatternParser.cs
- DesignerDataStoredProcedure.cs
- BaseValidator.cs
- DmlSqlGenerator.cs
- ElementHost.cs
- ClientTargetSection.cs
- WorkflowDataContext.cs
- HtmlElementCollection.cs
- RankException.cs
- CodeCompileUnit.cs
- securitycriticaldataClass.cs
- SimpleRecyclingCache.cs
- IsolatedStorage.cs
- SoapFormatter.cs
- MouseBinding.cs
- ApplicationContext.cs
- SqlUserDefinedTypeAttribute.cs
- BitStack.cs
- DeriveBytes.cs
- WmlTextViewAdapter.cs
- WebPartVerb.cs
- SecureConversationSecurityTokenParameters.cs
- ClientViaElement.cs
- FlowDocumentPageViewerAutomationPeer.cs
- _SingleItemRequestCache.cs
- SoapSchemaExporter.cs
- EntityUtil.cs
- WindowInteropHelper.cs
- SubtreeProcessor.cs
- InfoCardBaseException.cs
- TextEditorTyping.cs
- QfeChecker.cs