問題タブ [hwndhost]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - WPF TabControl で外部アプリケーションをホストする
HwndHost を使用して C# WPF タブ コントロール内にメモ帳 (私の実際のプロジェクトが埋め込むものではない) をホストするサンプル プロジェクトを作成できました。このため、Hosting external app in WPF window (ところで、DwayneNeed は必要ありません)に返信してくれた方々に感謝します。
この例は、メモ帳のホストされたインスタンスをクリックしてタブを変更しようとするまではうまく機能します。移動先の新しいページにコンテンツがない場合は、他のタブのクリックを受け入れる前に、まず現在のページ セレクターをクリックする必要があります。他のページにコンテンツがある場合 (何か... ボタンだけ)、新しいタブ セレクターを 2 回クリックして移動する必要があります。
私が試したことはうまくいきませんでした:
- AttachThreadInput()を使用して、両方のアプリケーション ウィンドウの入力スレッドを結合します。
this.InvalidateVisual();
タブ コントロールのマウス ダウン イベントを呼び出します。
トリックは何ですか:
TabControl.SelectedIndex
ボタンが押されたときに必要な値にプログラムで変更します。
この問題を回避するには、タブ セレクターの代わりにボタンを使用し (非表示にする)、プログラムでページを変更するだけでよいと思います。これは大したことではありませんが、他の誰かがこの問題に遭遇したことがあるかどうかを知りたいのですが、おそらくそれについての説明があります!
ps私はWPFとC#が初めてです。
wpf - wpf-host アプリケーションからのすべてのキーボードおよびマウス入力を、ホストされているプロセス外の win32 クライアントに渡します。(HwndHost を使用)
ロケーション 0, 0 から開始され、ダイアログ スタイルの古いアプリケーション (ゲーム) があります。通常の方法で移動できず、サイズを変更できず、非常に面倒です。ソースコードにはアクセスできず、コンパイルされたアプリケーションだけにアクセスできます。
私はこのアプリケーションを HwndHost を使用して wpf 形式でホストしていますが、これはうまく機能しています。ウィンドウのサイズ変更と移動が非常にスムーズです。
問題は、wpf フォームにフォーカスがある間に、ホストされているアプリケーションに渡されるだけで、すべてのキーボードとマウスの入力が必要なことです。
ホストされたプロセスがすべての入力を取得している間、メッセージやその他の凝ったものをフィルタリングする必要はありません。
これには何が最善のアプローチでしょうか?
プロセス外なので、これが問題を引き起こす可能性があることはわかっていますが、簡単な解決策があることを願っています.
面白いことに、ホストされているアプリケーションでマウスの動き (アプリケーション カーソルでは特別) が見られますが、クリックやキーボード入力が見逃されているようです。
ありがとう!
ヒューロン。
.net - WPF アプリケーションで複数の HwndHost をホストする
hwndhost
WPF アプリケーションで DirectX コンテンツを描画する要素を使用しています。WndProc
forをオーバーライドするHwndHost
と、ウィンドウ メッセージで呼び出されますが、作成した最初のインスタンスによってのみ呼び出されhwndhost
ます。
基本的に、WM_PAINT
メッセージで DirectX シーンをレンダリングし、" " パラメータを true としてマークします (渡されたが自分のハンドルhandled
かどうかを確認します)。true としてマークすると、メッセージを取得する他のインスタンスはありません。hwnd
WndProc
HwndHost
WM_PAINT
HwndHost
他のインスタンスにWM_PAINT
メッセージを受信させるにはどうすればよいですか?
wpf - WinAPI システム メニューを新しいウィンドウにコピー
HwndHost を使用して、WPF ウィンドウ内に別のアプリケーションのウィンドウをドッキングしています。これを行うには、ドッキングしているウィンドウの WS_CHILD スタイル属性を設定する必要があり、そのウィンドウのシステム メニューを失います。これは受け入れられません。HwndHost を使用すると、その属性が設定されていない場合に例外がスローされるため、これを回避する方法はありません。
私の質問は;
私のアプリケーションはシステム メニューを使用しないため、ドッキングされたアプリケーションのシステム メニューをアプリケーションのウィンドウに直接コピーする方法はありますか? 私が認識している WinAPI メニュー関数はすべて、メニューを最初から作成する必要があり、これらのメニューをホストされたアプリケーションにフックする方法がわかりません。
問題があるかどうかはわかりませんが、2 つのウィンドウは同じプロセス内にあります。私のアプリケーションは、ドッキングしているアプリケーション ウィンドウのプラグインです。
wpf - WPF コントロール内で Win32 ウィンドウをホストする場合、どの Windows メッセージを処理する必要がありますか?
これまでのところ、閉じる要求である WM_CLOSE と、閉じた後にウィンドウが実際に破棄されたときの WM_DESTROY をリッスンする必要があることしかわかりません。閉じた Win32 ウィンドウで役に立たない Win32 ホスト ビューを避ける必要があるため、これらを処理する必要があります。
他に終了タイプのメッセージはありますか? ウィンドウをホストしているモジュールが何らかの理由で不安定であるかどうかを知ってもかまいません。これにより、ホスト ビューも閉じざるを得なくなります。
wpf - WPF のホストされたウィンドウでマウス メッセージが表示されない
WPF アプリケーションで WinForms ユーザー コントロールをホストするよりも少し進んで、実際には Delphi フォーム、つまりトップ レベル ウィンドウをホストしています。私はブログ投稿How To Host Top-Level HWNDs In WPFのブードゥーを通じてそうしています。
ほぼすべてが完璧に機能します。Delphi に組み込まれた COM サーバーにメニュー パス文字列を送信すると、COM サーバーからウィンドウ ハンドルが返されます。このウィンドウ ハンドルは、ブログで説明されているホスト コントロールに渡します。Delphi ウィンドウは、私の介入なしで、ほぼすべてのイベント (むしろ Windows メッセージ) を正しく受信します。
唯一の問題はボタンです。それらはクリック イベント/メッセージを正常に受け取り、機能しますが、Delphi の担当者がボタンに新しいアイコンを追加し、各ボタンにはアクティブ アイコン、ホバー アイコン、およびクリック アイコンがあります。これらのアイコンを変更する必要があるメッセージを受け取りません。これらを除いて、ほとんどすべてのメッセージが機能するのはなぜですか? これを修正するには、何を読んだり、何をしたりできますか?