У меня есть приложение C# WinForms, которое появляется в системном трее. Приложение скрывает основную форму под нагрузку:PostMessage для скрытой формы не работает в первый раз
private void MainForm_Load(object sender, System.EventArgs e)
{
Hide();
}
Для одной и той же основной формы, я переопределен в WndProc, чтобы поймать пользовательское сообщение окна (это сообщение регистрируется в Windows, с помощью Win32 API вызова RegisterWindowMessage
).
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 начнет принимать сообщения только после того, как она будет скрыта и повторно показана ...
'SendMessage (HWND_BROADCAST, msg, NULL, NULL)' вместо 'PostMessage' работает с самого начала, но я хочу опубликовать сообщение. –