2013-07-17 81 views
4

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

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

screenshot

  • 图片1:测试点击通知,其位于用户的不活动溢出区+几秒钟后图标弹出显示。
  • 图2:通过点击位于溢出区域的通知图标+用户不活动2分钟显示的电池电量计弹出窗口。
+2

下来选民没有提供任何意见,但我认为你应该在你的问题上付出更多的努力。提示:使用换行符,并添加一个你想要避免的屏幕截图,一些代码等。 – ixe013

+0

我不能发布任何图片或更好地编辑文本(tryed),因为这一切都是从手机发送的。关于代码,它可能与Windows SDK 7.1中名为NotificationIcon的shell样本相仿。 – user629926

+0

[该示例是在C++中](http://archive.msdn.microsoft.com/shellintegration)。你用C#重写了它还是你的问题被错误标记了? +该示例中的窗口处于非活动状态时隐藏自身。你在任何地方点击或者窗户在一段时间后隐藏自己? – ixe013

回答

1

你应该叫

NotifyWinEvent(EVENT_SYSTEM_MENUPOPUPSTART, Handle, OBJID_CLIENT, 0); 

您展示窗口前,并呼吁

NotifyWinEvent(EVENT_SYSTEM_MENUPOPUPEND, Handle, OBJID_CLIENT, 0); 

后你隐藏它。

0

Flyout与其他窗口没有区别。

如果我理解你的问题,那就是随着时间的推移窗户消失了,那么解决方案很简单。不要使用任何NotifyAreaOverflowWindow。相反,创建自己的窗口,具有适当的属性(没有控制框,没有最大/最小按钮,没有标题文本等)。因为你可能无法控制你正在使用的类/对象的持续时间。这可能是为单一通知而设计的,而不是适度有用的;)。

此外,您可以根据需要进行花哨的事情,而不会遇到任何问题。

下面的教程进去就如何如此完美地放置它九牛二虎之力: http://blog.quppa.net/2010/12/09/windows-7-style-notification-area-applications-in-wpf-part-3-taskbar-position/

+0

感谢您的回复。 NotifyAreaOverflowWindow是该窗口(在第二张图片中靠近数字2显示)在本文档中被称为通知区溢出http://msdn.microsoft.com/en-us/library/windows/desktop/aa511448.aspx。我不直接使用它,只是让它保持可见状态,只要我自己的飞出。 – user629926

+0

我的答案保持不变。我建议你创建自己的窗口,以便你有适当的控制权。请参阅我提供的链接。 –