【发布时间】:2012-04-17 12:55:49
【问题描述】:
我有一个出现在系统托盘中的 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()隐藏窗体后继续工作。
谁能解释为什么它在MainForm_Load 事件处理程序的第一个Hide() 之后不起作用?我隐藏表格太早了吗?
EDIT1:它似乎与加载时隐藏无关。即使没有初始隐藏,我的主窗体 WndProc 也只会在隐藏并重新显示后开始接受广播帖子...
【问题讨论】:
-
SendMessage(HWND_BROADCAST, msg, NULL, NULL)而不是PostMessage从一开始就有效,但我想发布消息。
标签: c# c++ windows-messages