我有一个出现在系统托盘中的 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:似乎它与加载时隐藏无关。即使没有最初的隐藏,我的主窗体 WndProc 也只会在隐藏并重新显示后开始接受广播帖子......