我正在研究一个派生自 WPFWindow
类的类,该类实现了 Window 7 + shell 中可用的应用程序工具栏功能(也就是说,它调用 Win32SHAppBarWindow
以停靠到桌面边缘并取消停靠)。这个想法是,您可以在屏幕周围拖动窗口,当它在桌面边缘的某个距离内时,它会自行停靠。
因为需要调用 Win32SHAppbarWindow
函数,并且因为处理 WPF 事件并没有帮助,所以我编写了一个在 Win32 级别工作的窗口过程,并且使用该HwndSource.AddHook
方法被挂钩。首先调用此过程并处理它需要处理的任何内容,然后将其余部分传递给 WPF。
我一直在研究拖动逻辑,我想给用户一个视觉指示,表明窗口可以将自己停靠到它最接近的边缘,而无需实际停靠它。为此,我想显示一个带有虚线边框的透明矩形,其大小与停靠在它所在位置后的窗口大小相同。如果用户在该点释放鼠标左键,则窗口实际上将停靠在该边缘。一旦鼠标从那个边缘移开,矩形就会消失。
我知道如何计算矩形的大小和位置。但是如何显示矩形?我很确定我必须用 GDI32 调用来做,因为目标区域在窗口的非客户区和客户区之外。但是我将如何绘制矩形,而不会弄乱该区域中可能存在的其他窗口?