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