private static void OnSuppressEraseBackgroundChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            if (d is WebBrowser)
            {
                WebBrowser webBrowser = (WebBrowser)d;

                bool newValue = (bool)e.NewValue;
                if (newValue)
                {
                    if (!TryHookWebBrowser(webBrowser))
                    {
                        // The IE window has not been created yet, so we'll
                        // look for it once a web page has been loaded.
                        webBrowser.LoadCompleted += new LoadCompletedEventHandler(WebBrowserLoadCompleted);
                    }
                }
                else
                {
                    // When no longer suppressing the WM_ERASEBKGND message,
                    // dispose our window hook.
                    IEWindowHook hook = (IEWindowHook)webBrowser.GetValue(SuppressEraseBackgroundWindowHookProperty);
                    if (hook != null)
                    {
                        hook.Dispose();
                    }
                    webBrowser.ClearValue(SuppressEraseBackgroundWindowHookProperty);
                }
            }
        }
        private static bool TryHookWebBrowser(WebBrowser webBrowser)
        {
            if (GetSuppressEraseBackground(webBrowser))
            {
                // Try to find the IE window several layers within the WebBrowser.
                IntPtr hwndIEWindow = GetIEWindow(webBrowser);
                if (hwndIEWindow != IntPtr.Zero)
                {
                    // Hook the window messages so we can intercept the
                    // WM_ERASEBKGND message.
                    IEWindowHook hook = new IEWindowHook(new HWND(hwndIEWindow));

                    // Keep our hook alive.
                    webBrowser.SetValue(SuppressEraseBackgroundWindowHookProperty, hook);

                    return(true);
                }
            }

            return(false);
        }
        private static bool TryHookWebBrowser(WebBrowser webBrowser)
        {
            if (GetSuppressEraseBackground(webBrowser))
            {
                // Try to find the IE window several layers within the WebBrowser.
                IntPtr hwndIEWindow = GetIEWindow(webBrowser);
                if (hwndIEWindow != IntPtr.Zero)
                {
                    // Hook the window messages so we can intercept the
                    // WM_ERASEBKGND message.
                    IEWindowHook hook = new IEWindowHook(new HWND(hwndIEWindow));

                    // Keep our hook alive.
                    webBrowser.SetValue(SuppressEraseBackgroundWindowHookProperty, hook);

                    return true;
                }
            }

            return false;
        }