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