システム トレイに表示される C# WinForms アプリケーションがあります。アプリケーションはロード時にメイン フォームを非表示にしています。
private void MainForm_Load(object sender, System.EventArgs e)
{
Hide();
}
同じメイン フォームについて、WndProc をオーバーライドしてカスタム ウィンドウ メッセージをキャッチしました (そのメッセージはRegisterWindowMessage
Win32 API 呼び出しで Windows に登録されます)。
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_MYCUSTOM_MESSAGE)
{
// Handle custom message
}
}
外部の C++ アプリケーションから、同じカスタム ウィンドウ メッセージを PostMessage でブロードキャストしています。
UINT msg = RegisterWindowMessage(L"WM_MYCUSTOM_MESSAGE");
PostMessage(HWND_BROADCAST, msg, NULL, NULL);
C# アプリケーションを最初に起動した後に上記のコードを実行すると、WndProc に入りません。メイン フォームが表示された後 (システム トレイ アイコンをダブルクリックすることで、本質的Show()
にHide()
.
イベントハンドラーHide()
からの最初の後に機能しない理由を誰かが説明できますか? MainForm_Load
フォームを非表示にするのが早すぎますか?
EDIT1: Hide on load とは何の関係もないようです。最初の非表示がなくても、私のメイン フォーム WndProc は、非表示にして再表示した後にのみブロードキャスト投稿の受け入れを開始します...