【问题标题】:Disable NotifyIconOverflowWindow autohide禁用 NotifyIconOverflowWindow 自动隐藏
【发布时间】:2013-07-15 20:35:51
【问题描述】:

我做了类似于win7电池表的弹出窗口。它的行为就像内置的一样,除非它通过位于NotifyAreaOverflowWindow 上的通知图标显示,也就是通知溢出区域,窗口在一段时间后自动隐藏,而只有在我的弹出窗口关闭时它才应该隐藏。我可以用spyxx 发现的唯一区别是,在一段时间后溢出窗口只会向自己发送WM_SHOWWINDOW wp:0 lp:0 消息。

当我的浮出控件处于活动状态时,如何防止溢出窗口自动隐藏?

  • 图 1:单击位于溢出区域的通知图标 + 几秒钟的用户不活动后显示的测试浮出控件。
  • 图 2:通过单击位于溢出区域的通知图标 + 2 分钟的用户不活动状态显示电池计量器弹出按钮。

【问题讨论】:

  • 投反对票的人没有提供任何 cmets,但我认为您应该在您的问题上投入更多精力。提示:使用换行符并添加您想要避免的屏幕截图、一些代码等。
  • 我无法发布任何图片或更好地编辑文本(尝试过),因为这一切都是从手机发送的。关于代码,可以在 Windows SDK 7.1 中找到名为 NotificationIcon 的 shell 示例。
  • That sample is in C++。你是用 C# 重写它还是你的问题被错误标记了? +该示例中的窗口在不活动时会自行隐藏。您是单击任意位置还是窗口在一段时间后自行隐藏?
  • 尝试移动它的图标来通知oferflow区域并点击它。等待。一段时间后溢出区域将隐藏,窗口将挂在那里。我需要在显示浮出控件时不要隐藏溢出窗口。
  • 通知区域是用户的财产;除了将您的应用程序放入其中或删除该应用程序之外,您无法与它进行交互。 blogs.msdn.com/b/oldnewthing/archive/2011/04/26/10157902.aspx

标签: c# winapi taskbar flyout


【解决方案1】:

你应该打电话

NotifyWinEvent(EVENT_SYSTEM_MENUPOPUPSTART, Handle, OBJID_CLIENT, 0);

在你展示你的窗口并打电话之前

NotifyWinEvent(EVENT_SYSTEM_MENUPOPUPEND, Handle, OBJID_CLIENT, 0);

隐藏之后。

【讨论】:

    【解决方案2】:

    弹出窗口与任何其他窗口没有什么不同。

    如果我理解您的问题,即窗口会随着时间的推移而消失,那么解决方案非常简单。不要使用任何 NotifyAreaOverflowWindow 。相反,使用适当的属性(没有控制框、没有最大/最小按钮、没有标题文本等)创建您自己的窗口。因为设置您正在使用的类/对象的持续时间可能超出您的控制范围。它可能是为单一通知而设计的,而不是适度有用的东西;)。

    此外,您可以随心所欲地做一些花哨的事情,而不会遇到任何问题。

    以下教程详细介绍了如何完美定位它: http://blog.quppa.net/2010/12/09/windows-7-style-notification-area-applications-in-wpf-part-3-taskbar-position/

    【讨论】:

    • 感谢您的回复。 NotifyAreaOverflowWindow 是在本文档msdn.microsoft.com/en-us/library/windows/desktop/aa511448.aspx 中称为通知区域溢出的那个窗口(显示在第二张图片上的数字 2 附近)。我不直接使用它,我只是希望它保持可见,只要我自己的弹出窗口存在。
    • 我的答案保持不变。我建议您创建自己的窗口,以便进行适当的控制。请参阅我提供的链接。
    猜你喜欢
    • 2022-07-28
    • 1970-01-01
    • 2016-02-12
    • 2022-08-16
    • 2020-01-22
    • 2019-05-04
    • 1970-01-01
    • 2012-01-12
    • 2013-10-14
    相关资源
    最近更新 更多