使用System.Drawing在桌面上绘制十字准线?

时间:2011-08-08 21:21:21

标签: c# drawing screen center

我正在尝试创建一个非常小的c#实用程序应用程序,它将利用System.Drawing在我的桌面上绘制一个全屏,静态,固定的十字准线,以便我可以将一些桌面项目与相关的屏幕中心对齐。

我试着查看一些例子,但没有提出很多,并且想知道是否有人在这方面有任何经验。

如果可能,我宁愿不制作透明的全屏窗口来完成这项专长。

3 个答案:

答案 0 :(得分:3)

尝试此操作时会出现大量问题。首先,你不拥有桌面,所以你永远无法完全控制桌面。

[DllImport("User32.dll")]
static extern IntPtr GetDC(IntPtr hwnd);

[DllImport("User32.dll")]
static extern void ReleaseDC(IntPtr dc);

private void DrawDeskTop()
{
  IntPtr desk = GetDC(IntPtr.Zero);
  using (Graphics g = Graphics.FromHdc(desk))
  {
    g.FillRectangle(Brushes.Red, new Rectangle((SystemInformation.WorkingArea.Width / 2) - 4, (SystemInformation.WorkingArea.Height / 2) - 20, 8, 40));
    g.FillRectangle(Brushes.Red, new Rectangle((SystemInformation.WorkingArea.Width / 2) - 20, (SystemInformation.WorkingArea.Height / 2) - 4, 40, 8));
  }
  ReleaseDC(desk);
}

当它运行时,它看起来很棒。但只要你将表格移到中心或移动其他窗户,加号就会消失,所以你必须再次画画,然后再次画画。

答案 1 :(得分:1)

你无法在本机级别的桌面上绘图(可能不包括一些黑客支持Win16,这会导致组合和各种其他可怕的行为),所以当然不能使用System.Drawing。要做到这一点,你必须创建一个至少与图像大小相同的透明窗口并在其上绘制。

答案 2 :(得分:0)

您是否有理由希望使用代码来实现此目的?我会使用你最喜欢的绘画程序并创建一个图像。将该图像设置为您的桌面背景,这应该会给您与您在代码中要求的结果相同的结果(并且更快)。

如果你必须使用代码执行此操作,我会考虑使用WPF。它将简化透明度问题。但是,您仍然可以在桌面顶部使用应用程序。你将不得不处理这个问题(也许还有其他一些问题)。