private SetClassLongPtr ( |
||
hwnd | ||
nIndex | GCLP | |
dwNewLong | ||
Résultat |
private static void _OnHwndBackgroundBrushChanged(DependencyObject d) { if (DesignerProperties.GetIsInDesignMode(d)) { return; } var window = d as Window; Verify.IsNotNull(window, "window"); WindowExtensions ext = _EnsureAttachedExtensions(window); if (ext._hwnd == IntPtr.Zero) { ext.WindowSourceInitialized += () => _OnHwndBackgroundBrushChanged(window); return; } SolidColorBrush backgroundBrush = (SolidColorBrush)window.GetValue(HwndBackgroundBrushProperty); //if (backgroundBrush == null) //{ // Nothing to change. // return; //} Color backgroundColor = backgroundBrush.Color; // Not really handling errors here, but they shouldn't matter... Might leak an HBRUSH. IntPtr hBrush = NativeMethods.CreateSolidBrush(Utility.RGB(backgroundColor)); // Note that setting this doesn't necessarily repaint the window right away. // Since the WPF content should cover the HWND background this doesn't matter. // The new background will get repainted when the window is resized. IntPtr hBrushOld = NativeMethods.SetClassLongPtr(ext._hwnd, GCLP.HBRBACKGROUND, hBrush); if (IntPtr.Zero != hBrushOld) { NativeMethods.DeleteObject(hBrushOld); } }