透明なブラウザー コンポーネント (デフォルトで背景が透明) とボタン (たとえば、そのアプリを閉じる) で構成されるウィンドウレス mfc c++ アプリ (xp で実行される) を作成することは可能ですか?
4 に答える
次のコードを試すことができますが、選択またはサイズ変更時にアーティファクトが残ります。
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;
}
いいえWebBrowser
。MFCアプリでコンポーネントをホストし、非クライアント領域に閉じるボタンを1つだけペイントしても問題はありませんが、WebBrowser
コンポーネント自体が背景をレンダリングします。
標準の WebBrowser (埋め込み IE エンジン) ではそれができないと思います。これは、透過性の希望について何も知らず、常に背景を描画するためです。
HTMLayoutなどの別の html エンジンでも可能です。インターネット ブラウザとしてはあまり優れていませんが (javascript がないなど)、Web スタイルの UI では WebBrowser よりもはるかに優れています (高速で、メモリ使用量が少なく、グラデーション、アニメーション、高度なレイアウトをサポートしています)。イメージ、コントロール、リンク、アニメーション、およびボタンを含む "Web UI" だけが必要で、MFC、WTL、または純粋な WinAPI を使用している場合、これは適切なオプションです。
ウィンドウの背景をキャプチャして、ブラウザ コンポーネントの背景として追加しようとしましたか? もちろん、自分 (またはチーム) が作成した HTML ドキュメントを表示したい場合にのみ機能しますが、そうでない場合は、質問全体が無意味になります。
埋め込みブラウザでこれをやろうとしたことはありませんが、他のコントロール(メモボックスなど)でそれを行ったところ、うまくいきました。この解決策を選択した場合でも、ウィンドウを移動またはサイズ変更するたびに、ウィンドウの背景を再キャプチャする必要があることに注意してください。
選択したソリューションを使用して組み込みブラウザーに背景を表示できますが、最良のオプションは、CSS で定義された背景を使用することです。これは、自分のものに置き換えられます。(ドキュメント全体の意図しないリロードを避けるために、フォームのサイズ変更/移動時に背景を更新する単純なJavaScriptを作成することを忘れないでください。)
部分的なスクリーン キャプチャの詳細については、こちらを参照してください。