2012-04-12 5 views

Antwort

1

Nein. Es gibt kein Problem beim Hosten einer WebBrowser Komponente in einer MFC-App, und malen nur eine einzige Schließen-Schaltfläche im Non-Client-Bereich, aber die WebBrowser Komponente selbst wird einen Hintergrund rendern.

+0

Aber ist es möglich, den Standard-WebBrowser-Komponentenhintergrund transparent zu machen (Hintergrund ist nicht in CSS-Dateien definiert, die wir über diesen Browser öffnen)? – myWallJSON

2

können Sie versuchen, den folgenden Code, aber es wird immer noch Artefakte bei der Wahl oder Ändern der Größe:

private void WebCtrl_Loaded(object sender, RoutedEventArgs e) 
    { 
     var hRef = new HandleRef(null, WebCtrl.Handle); 

     int style = GetWindowLong(hRef, GWL_EXSTYLE); 
     if ((style & WS_EX_TRANSPARENT) == 0) 
      SetWindowLong(hRef, GWL_EXSTYLE, style | WS_EX_TRANSPARENT); 

     style = GetWindowLong(hRef, GWL_STYLE); 
     if ((style & WS_CLIPCHILDREN) == 0) 
      SetWindowLong(hRef, GWL_STYLE, style | WS_CLIPCHILDREN); 
    } 

    IntPtr WebCtrl_MessageHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
    { 
     if (msg == WM_ERASEBKGND) 
      handled = true; 
     return IntPtr.Zero; 
    } 
0

Ich glaube nicht, Sie tun können, dass mit Standard-Web-Browsers (Embedded IE-Engine), weil es tut weiß nichts über Ihre Transparenzwünsche und wird immer einen Hintergrund zeichnen.

Es ist mit alternativen HTML-Engine, z. HTMLayout. Es ist zwar nicht sehr gut als Internet-Browser (kein Javascript usw.), aber für Web-Stil UI ist es viel besser als WebBrowser (schneller, verwendet weniger Speicher, unterstützt Farbverläufe, Animationen, erweiterte Layout). Wenn Sie nur "Web-UI" mit Bildern, Steuerelementen, Links, Animationen und Schaltflächen benötigen und MFC, WTL oder reines WinAPI verwenden, ist dies eine gute Option.

0

Haben Sie versucht, den Hintergrund Ihres Fensters zu erfassen und es als Hintergrund der Browser-Komponente hinzuzufügen? Natürlich wird es nur arbeiten, wenn Sie ein HTML-Dokument anzeigen möchten, das von Ihnen (/ Ihrem Team) erstellt wurde, aber wenn dies nicht der Fall ist, wäre die ganze Frage sinnlos.

Ich habe nie versucht, so Whit, einen eingebetteten Browser zu tun, aber ich habe es in einigen anderen Kontrollen (wie Memo-Boxen), und es funktionierte. Wenn Sie diese Lösung wählen, sollten Sie immer noch wissen, dass Sie den Hintergrund Ihres Fensters immer neu erfassen müssen, wenn es verschoben oder in der Größe geändert wird.

Sie können eine Lösung Ihrer Wahl verwenden, um den Hintergrund im eingebetteten Browser anzuzeigen, aber die beste Option besteht darin, einen CSS-definierten Hintergrund zu verwenden, der durch Ihren ersetzt wird. (Vergessen Sie nicht, eine einfache javascript zu fälschen, um den Hintergrund auf dem Formular zu vergrößern, um das versehentliche Neuladen des gesamten Dokuments zu vermeiden.)

Weitere Informationen über die partielle Bildschirmaufnahme finden Sie unter here.

Verwandte Themen