【问题标题】:Shell_NotifyIcon() and an invisible windowShell_NotifyIcon() 和一个不可见的窗口
【发布时间】:2012-09-14 01:29:15
【问题描述】:

我想使用 Shell_NotifyIcon() 将图标添加到系统托盘,但我不想在我的应用程序中有可见窗口。这就是为什么我将一个仅消息窗口的句柄传递给 Shell_NotifyIcon()。窗口是这样创建的:

hTrayWnd = CreateWindowEx(0, CLASSNAME, "tray_dummy", 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, HINSTANCE, NULL);

CLASSNAME 指向我使用 RegisterClassEx() 注册的类的名称,而 HINSTANCE 是我的实例的句柄。

现在的问题是:托盘图标已添加,但我的班级的 WindowProc() 从未被调用。如果我改用普通的顶级窗口,一切正常。

没有顶级窗口就没有办法创建托盘图标吗?我已经看到应用程序有一个没有顶级窗口的托盘图标,所以它必须以某种方式成为可能。但为什么它不适用于 HWND_MESSAGE 窗口?

谢谢!

【问题讨论】:

  • 如果你最终需要,你不能将WS_VISIBLE 传递到普通窗口的样式标志中。
  • 那么有没有办法为它使用 HWND_MESSAGE 窗口呢?它必须是一个真正的窗口,只是没有 WS_VISIBLE 标志?
  • 我不确定仅消息是否有效,但如果无效,这是一种解决方案。就我而言,这对我来说效果很好(不同之处在于我的未来可能会出现)。
  • 好的,AFAICS HWND_MESSAGE 窗口不起作用...
  • 该线程是否在运行正常的消息循环?

标签: c winapi shell tray


【解决方案1】:

哎呀,对不起,这是我的错。它不起作用的原因是我从不同的线程调用了 CreateWindowEx() 。当我使用主线程时,它工作正常。

【讨论】:

    猜你喜欢
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2023-03-17
    • 2011-12-20
    相关资源
    最近更新 更多