2010-11-24 17 views
4

私は従来のC++のwin32アプリケーションを持っており、wpfウィンドウを使って拡張すると機能します。WPFアプリケーションでwin32 windowsをホストしていますか?

しかし、私がしたいのは、メインウィンドウとしてのWPFウィンドウと、プリウィンドウシェルウィンドウの古いウィンドウだけではありません。

従来のC++プロジェクトでは、ブートストラップ、シェルウィンドウ、MEFローダー、すべてのベルとホイッスルを追加したいと思います。そしてそこに、必要なときに従来のwin32ウィンドウを開くコマンドをいくつか入れたいと思う。今のWin32アプリケーションでWPFウィンドウを開くために

は簡単ですが、私はちょうど

System::Windows::Forms::Integration::ElementHost::EnableModelessKeyboardInterop(mywindow); 

を使用する必要があります。しかし、どのように私は、WPFアプリでのWin32ウィンドウを開きますか? win32ウィンドウにはメッセージポンプループが必要ですが、どこに配置すればいいですか:

MSG msg; 
while (GetMessage(&msg, NULL, NULL, NULL)) 
{ 
    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
} 

ループ用に新しいスレッドを作成することはできますか?または、このためのinteropヘルパーもありますか?

これは私の考えですか?

+0

おそらくスイッチを反転する時間。 WPFアプリケーションを主なものにしましょう。 –

答えて

5

あなたがこれを見たことがある?:How WPF uses HWNDs

を私もこれを読んでお勧めします。 Walkthrough: Hosting a Win32 Control in WPF

あなたがコントロールが含まれていますホストウィンドウがある見るように。ホストウィンドウには、セルフペイントされたコンテンツなどを含めることもできます。

HwndHostからWndProcをオーバーライドする必要があります。それからネイティブハンドラに転送することは可能かもしれません。まだそれをしていない。

@Tergiverが指摘したように、メッセージポンプは必要ありません。

+0

クールで良いものですが、これはWPFウィンドウでwin32コントロールをホストするためのものではありますか?むしろスタンドアロンのwin32ウィンドウを開きたいのですが、これをどのように適用しなければならないのかはまだ分かりません。しかし、私は今、出発点があります、ありがとう! – Sam

+0

同じページのwin32 hwndにwpf-pageをホスティングするためのソリューションもあります。 – frast

+0

これは私が達成したいものでもありません:)しかし、私がメッセージポンプについて心配する必要がない情報を理解する限り、WPFはそれを管理しています! – Sam

関連する問題