4

winforms アプリケーション内で、MFC ライブラリ クラスからウィンドウ メッセージを受信するメッセージのみのウィンドウを作成しようとしています。

サブクラス化を試みましNativeWindowたが、コンストラクターで次のようなウィンドウ ハンドルを要求しています。

CreateParams cp = new CreateParams();
cp.Parent = (IntPtr)HWND_MESSAGE;
this.CreateHandle(cp);

しかし、「ウィンドウハンドルの作成中にエラーが発生しました」というメッセージとともに Win32Exception がスローされます。Windows フォームからメッセージのみのウィンドウを作成するにはどうすればよいですか? NativeWindow適切なアプローチを使用していますか?

4

4 に答える 4

2

それを試してください:

[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

static IntPtr HWND_MESSAGE = new IntPtr(-3);

protected override void OnHandleCreated(EventArgs e)
{
    base.OnHandleCreated(e);
    SetParent(this.Handle, HWND_MESSAGE);
}
于 2009-06-01T20:19:23.430 に答える
0

ウィンドウクラスも指定する必要があると思います。

于 2009-06-01T16:40:47.737 に答える
0

から派生さFormせて、ウィンドウを強制的に非表示にする必要があるのではないかと心配しています。

別の方法 (クラス ライブラリが変更可能な場合) は、ウィンドウなしでメッセージ ポンプを実行することです ( Application.RunおよびApplication.AddMessageFilterを参照するか、 PeekMessage & Coを使用して pinvokes を使用する場合)。

この場合、Application.Run を実行するスレッド ID を使用してPostThreadMessageを使用してメッセージを送信できますが、メッセージの確認応答を待機しないため、実際にはアプリケーション メッセージ ポンプ スレッドと同期できません。

于 2010-08-02T10:35:15.820 に答える