C#停靠在桌面边缘,弹出问题

时间:2011-01-20 21:44:53

标签: c# wpf docking appbar

我正在创建一个WPF应用程序,它可以停靠在桌面的一个边缘。我通过在屏幕的同一边缘设置一个透明的5px宽窗口'EdgeWindow'来做到这一点,只要鼠标经过,那么应用程序的窗口就会弹出。

问题在于,当'EdgeWindow'设置为'Topmost'时,其他Windows应用程序也将其窗口设置为'Topmost',这意味着EdgeWindow可以最终位于某些窗口下方。就我所知,似乎没有一种保证将EdgeWindow保持在最佳位置的方法。

我的应用程序已经是'ApplicationDesktopToolbar(类似于http://www.codeproject.com/KB/shell/csdoesshell3.aspx)所以我希望可能有某种方式使用该基础结构来确定窗口是否应该弹出并完全摆脱'EdgeWindow'但我不能看不到任何有用的东西。

2 个答案:

答案 0 :(得分:0)

我尝试使用ShAppBar类做一个类似的项目;如果你使用的是你说的ShAppBar类,那么就不需要有一个看不见的最顶层窗口。此外,您提供的代码的链接似乎包含以下内容:

GetAutoHideBar            = 0x00000007,    
// Registers or unregisters an autohide appbar for an edge of 

// the screen. 

SetAutoHideBar            = 0x00000008,    
// Notifies the system when an appbar's position has changed. 

WindowPosChanged          = 0x00000009,    
// Sets the state of the appbar's autohide and always-on-top 

// attributes.

SetState                  = 0x0000000a        

这不起作用吗?

答案 1 :(得分:0)

我最终使用的解决方案是监听鼠标位置的任何变化,如果它接近边缘则弹出窗口。当然,当光标移出应用程序时,正常的WPF鼠标监听将不起作用。

原创我计划使用WH_MOUSE_LL,但似乎该功能在Windows 7中无法正常工作,因为在Windows 7中,由于某种原因,它们会不时地注销任何附加的挂钩。

最终我最终使用了'RawInput'(http://www.codeproject.com/KB/system/rawinput.aspx),效果非常好。该示例仅显示如何检索键盘输入事件,但更改它以侦听鼠标移动事件并不困难。