如何创建一个带箭头指向另一个窗口的窗口?

7

我希望能够设计出类似于在Visual Studio中遇到异常时看到的那种窗口,这种窗口会和代码窗口中的某个点相连。下面是一张图片:

Example

我注意到每当代码窗口失去焦点时,异常窗口就消失了。但是,当有焦点时,我可以移动窗口,箭头仍然指向目标。

这是如何实现的呢?具体来说,我该如何在一个窗口和另一个窗口之间画一条线

我使用C#编程并使用Windows Forms。

2个回答

4
在您的示例中,如果文本框失去焦点,则异常窗口不会总是消失!
通过使用Spy++工具进行一些调查(将查找窗口光标放在该行上),您会注意到,您在黄色文本和异常窗口之间看到的线条包含在一个窗口中(具有透明背景)(在VS 2010中,其类窗口类型为"WindowsForms10.Window.8.app.0.34f5582_r41_ad1")。此窗口还具有WS_POPUP样式,并且是线条的确切边界框(其大小和位置恰好适合线条)。
因此,您可以做同样的事情:创建一个透明的弹出窗口,在其中绘制一条线,并设置其位置和大小,以便线条出现在您想要的控件之间。

从Windows API的角度来看,这是最有意义的。此外,这是一种很棒的调查技术! - Charlie Salts

2
我不确定具体如何实现,但您可能可以使用以下思路来实现类似功能。
  1. 创建一个新表单。
  2. 覆盖绘制事件以便不进行绘制。
  3. 从一个角落画一条线到另一个角落(这取决于线的方向)。
  4. 调整表单的大小和位置,使线段连接您的两个点。
  5. 关于焦点部分还不确定!

这基本上与Andrei的解决方案相同。聚焦并不是很重要,但这是我注意到的一点,我觉得应该提一下。 - Charlie Salts
@该死 - 他一定比我打字快 - WraithNath
是的,我必须承认我使用Spy++的唯一目的就是获取桌面窗口句柄,以便在桌面上运行屏幕保护程序。 :p - WraithNath

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接