PostMessage в скрытую форму не работает #39; не работает в первый раз

У меня есть приложение 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 начнет принимать широковещательные сообщения только после того, как она будет скрыта и -показана...

5
задан huysentruitw 17 April 2012 в 13:28
поделиться