Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Core / CSharp / System / Windows / Media / MediaContextNotificationWindow.cs / 1 / MediaContextNotificationWindow.cs
//------------------------------------------------------------------------------ // //// Copyright (c) Microsoft Corporation. All rights reserved. // // // Description: // A wrapper for a top-level hidden window that is used to process // messages broadcasted to top-level windows only (such as DWM's // WM_DWMCOMPOSITIONCHANGED). If the WPF application doesn't have // a top-level window (as it is the case for XBAP applications), // such messages would have been ignored. // //----------------------------------------------------------------------------- using System; using System.Windows.Threading; using System.Collections; using System.Diagnostics; using System.Windows.Media.Animation; using System.Windows.Media.Composition; using Microsoft.Win32; using Microsoft.Internal; using MS.Internal; using MS.Win32; using System.Security; using System.Security.Permissions; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; using UnsafeNativeMethods=MS.Win32.PresentationCore.UnsafeNativeMethods.MilCoreApi; using SafeNativeMethods=MS.Win32.PresentationCore.SafeNativeMethods; namespace System.Windows.Media { ////// The MediaContextNotificationWindow structure provides its owner /// MediaContext with the ability to receive and forward window /// messages broadcasted to top-level windows. /// internal struct MediaContextNotificationWindow { //+--------------------------------------------------------------------- // // Internal Methods // //--------------------------------------------------------------------- #region Internal Methods ////// Sets the owner MediaContext and creates the notification window. /// ////// Critical - Creates an HwndWrapper and adds a hook. /// TreatAsSafe: The _hwndNotification window is critical and this function is safe to call /// [SecurityCritical, SecurityTreatAsSafe] internal void CreateNotificationWindow(MediaContext ownerMediaContext) { // Remember the pointer to the owner MediaContext that we'll forward the broadcasts to. _ownerMediaContext = ownerMediaContext; // Create a top-level, invisible window so we can get the WM_DWMCOMPOSITIONCHANGED // and other DWM notifications that are broadcasted to top-level windows only. HwndWrapper hwndNotification; hwndNotification = new HwndWrapper(0, NativeMethods.WS_POPUP, 0, 0, 0, 0, 0, "MediaContextNotificationWindow", IntPtr.Zero, null); _hwndNotificationHook = new HwndWrapperHook(MessageFilter); _hwndNotification = new SecurityCriticalDataClass(hwndNotification); _hwndNotification.Value.AddHook(_hwndNotificationHook); } /// /// Critical - Calls dispose on the critical hwnd wrapper. /// TreatAsSafe: It is safe to dispose the wrapper /// [SecurityCritical, SecurityTreatAsSafe] internal void DisposeNotificationWindow() { if (_hwndNotification != null) _hwndNotification.Value.Dispose(); _hwndNotificationHook = null; _hwndNotification = null; _ownerMediaContext = null; } #endregion Internal Methods //+---------------------------------------------------------------------- // // Private Methods // //--------------------------------------------------------------------- #region Private Methods ////// If any of the interesting broadcast messages is seen, forward them to the owner MediaContext. /// private IntPtr MessageFilter(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { Debug.Assert(_ownerMediaContext != null); if (msg == NativeMethods.WM_DWMCOMPOSITIONCHANGED) { _ownerMediaContext.OnDWMCompositionChanged(); } return IntPtr.Zero; } #endregion Private Methods //+---------------------------------------------------------------------- // // Private Fields // //---------------------------------------------------------------------- #region Private Fields // The owner MediaContext private MediaContext _ownerMediaContext; // A top-level hidden window. private SecurityCriticalDataClass_hwndNotification; // The message filter hook for the top-level hidden window. private HwndWrapperHook _hwndNotificationHook; #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // // Copyright (c) Microsoft Corporation. All rights reserved. // // // Description: // A wrapper for a top-level hidden window that is used to process // messages broadcasted to top-level windows only (such as DWM's // WM_DWMCOMPOSITIONCHANGED). If the WPF application doesn't have // a top-level window (as it is the case for XBAP applications), // such messages would have been ignored. // //----------------------------------------------------------------------------- using System; using System.Windows.Threading; using System.Collections; using System.Diagnostics; using System.Windows.Media.Animation; using System.Windows.Media.Composition; using Microsoft.Win32; using Microsoft.Internal; using MS.Internal; using MS.Win32; using System.Security; using System.Security.Permissions; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; using UnsafeNativeMethods=MS.Win32.PresentationCore.UnsafeNativeMethods.MilCoreApi; using SafeNativeMethods=MS.Win32.PresentationCore.SafeNativeMethods; namespace System.Windows.Media { ////// The MediaContextNotificationWindow structure provides its owner /// MediaContext with the ability to receive and forward window /// messages broadcasted to top-level windows. /// internal struct MediaContextNotificationWindow { //+--------------------------------------------------------------------- // // Internal Methods // //--------------------------------------------------------------------- #region Internal Methods ////// Sets the owner MediaContext and creates the notification window. /// ////// Critical - Creates an HwndWrapper and adds a hook. /// TreatAsSafe: The _hwndNotification window is critical and this function is safe to call /// [SecurityCritical, SecurityTreatAsSafe] internal void CreateNotificationWindow(MediaContext ownerMediaContext) { // Remember the pointer to the owner MediaContext that we'll forward the broadcasts to. _ownerMediaContext = ownerMediaContext; // Create a top-level, invisible window so we can get the WM_DWMCOMPOSITIONCHANGED // and other DWM notifications that are broadcasted to top-level windows only. HwndWrapper hwndNotification; hwndNotification = new HwndWrapper(0, NativeMethods.WS_POPUP, 0, 0, 0, 0, 0, "MediaContextNotificationWindow", IntPtr.Zero, null); _hwndNotificationHook = new HwndWrapperHook(MessageFilter); _hwndNotification = new SecurityCriticalDataClass(hwndNotification); _hwndNotification.Value.AddHook(_hwndNotificationHook); } /// /// Critical - Calls dispose on the critical hwnd wrapper. /// TreatAsSafe: It is safe to dispose the wrapper /// [SecurityCritical, SecurityTreatAsSafe] internal void DisposeNotificationWindow() { if (_hwndNotification != null) _hwndNotification.Value.Dispose(); _hwndNotificationHook = null; _hwndNotification = null; _ownerMediaContext = null; } #endregion Internal Methods //+---------------------------------------------------------------------- // // Private Methods // //--------------------------------------------------------------------- #region Private Methods ////// If any of the interesting broadcast messages is seen, forward them to the owner MediaContext. /// private IntPtr MessageFilter(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { Debug.Assert(_ownerMediaContext != null); if (msg == NativeMethods.WM_DWMCOMPOSITIONCHANGED) { _ownerMediaContext.OnDWMCompositionChanged(); } return IntPtr.Zero; } #endregion Private Methods //+---------------------------------------------------------------------- // // Private Fields // //---------------------------------------------------------------------- #region Private Fields // The owner MediaContext private MediaContext _ownerMediaContext; // A top-level hidden window. private SecurityCriticalDataClass_hwndNotification; // The message filter hook for the top-level hidden window. private HwndWrapperHook _hwndNotificationHook; #endregion Private Fields } } // 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
- DataSourceListEditor.cs
- OleDbFactory.cs
- PropertyGeneratedEventArgs.cs
- SoapEnumAttribute.cs
- ExpressionParser.cs
- DoubleAnimationBase.cs
- SHA1.cs
- AuthStoreRoleProvider.cs
- TextContainerChangeEventArgs.cs
- TreeNodeStyle.cs
- XPathNavigatorKeyComparer.cs
- DetailsViewInsertedEventArgs.cs
- DrawingContextDrawingContextWalker.cs
- DefaultWorkflowLoaderService.cs
- XamlRtfConverter.cs
- base64Transforms.cs
- AlphabeticalEnumConverter.cs
- Reference.cs
- Funcletizer.cs
- Type.cs
- RIPEMD160Managed.cs
- initElementDictionary.cs
- OracleSqlParser.cs
- RpcResponse.cs
- NameHandler.cs
- JsonSerializer.cs
- Drawing.cs
- EntitySetBaseCollection.cs
- TransformGroup.cs
- ConfigDefinitionUpdates.cs
- StreamUpgradeInitiator.cs
- SymbolPair.cs
- RawStylusInputCustomData.cs
- VolatileEnlistmentState.cs
- ConfigurationManagerHelper.cs
- CodeMethodInvokeExpression.cs
- DesignerObject.cs
- HttpDictionary.cs
- TemplatedMailWebEventProvider.cs
- XPathNavigatorReader.cs
- HttpSessionStateWrapper.cs
- DataGridViewHeaderCell.cs
- Console.cs
- DesignerSerializationManager.cs
- EmptyStringExpandableObjectConverter.cs
- PropertyGridEditorPart.cs
- DBConnectionString.cs
- BindingGraph.cs
- ProfileService.cs
- AddInIpcChannel.cs
- SystemBrushes.cs
- HScrollProperties.cs
- Logging.cs
- SpoolingTaskBase.cs
- DetailsViewPageEventArgs.cs
- ArraySortHelper.cs
- BlockUIContainer.cs
- Propagator.ExtentPlaceholderCreator.cs
- BitmapEffectDrawingContent.cs
- XmlILIndex.cs
- StorageAssociationTypeMapping.cs
- UrlParameterReader.cs
- HorizontalAlignConverter.cs
- Predicate.cs
- XmlSchemaSimpleContentRestriction.cs
- Shape.cs
- ChineseLunisolarCalendar.cs
- XmlAttributeCollection.cs
- PlainXmlDeserializer.cs
- Tokenizer.cs
- ToolBar.cs
- QueryOperator.cs
- CountAggregationOperator.cs
- SchemaComplexType.cs
- ElementMarkupObject.cs
- EntitySetRetriever.cs
- DependencyObject.cs
- GZipStream.cs
- RepeatInfo.cs
- XmlHierarchicalDataSourceView.cs
- IISUnsafeMethods.cs
- FixedSOMImage.cs
- ArgumentNullException.cs
- DesignerEventService.cs
- HttpCookiesSection.cs
- CaseKeyBox.ViewModel.cs
- Exceptions.cs
- CommentEmitter.cs
- securitycriticaldata.cs
- SpecularMaterial.cs
- ObjectPropertyMapping.cs
- WsdlInspector.cs
- TabControlAutomationPeer.cs
- RelationshipFixer.cs
- SafeNativeMemoryHandle.cs
- MessageHeaderException.cs
- StorageMappingItemLoader.cs
- TemplateControlParser.cs
- Padding.cs
- ConfigurationConverterBase.cs