Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用System.Drawing在桌面上绘制十字线?_C#_Drawing_Screen_Center - Fatal编程技术网

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

C# 使用System.Drawing在桌面上绘制十字线?,c#,drawing,screen,center,C#,Drawing,Screen,Center,我正在尝试创建一个非常小的c#实用程序应用程序,它将利用System.Drawing在桌面上绘制一个全屏、静态、固定的十字线,以便将一些桌面项目与相关屏幕中心对齐 我试着查找一些例子,但没有找到很多,我想知道是否有人有这方面的经验 如果可能的话,我宁愿不制作一个透明的全屏窗口来完成这一壮举。你有理由想用代码来完成这一壮举吗?我会使用你最喜欢的绘画程序,并创建一个图像。将该图像设置为桌面背景,这样可以得到与代码中要求的结果相同的结果(并且更快) 如果必须对代码执行此操作,我将研究如何使用WPF。这

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

我试着查找一些例子,但没有找到很多,我想知道是否有人有这方面的经验


如果可能的话,我宁愿不制作一个透明的全屏窗口来完成这一壮举。

你有理由想用代码来完成这一壮举吗?我会使用你最喜欢的绘画程序,并创建一个图像。将该图像设置为桌面背景,这样可以得到与代码中要求的结果相同的结果(并且更快)


如果必须对代码执行此操作,我将研究如何使用WPF。这将简化透明度问题。但是,你的桌面上仍然有一个应用程序。你将不得不处理这个问题(也许还有其他一些问题)

您有没有理由希望使用代码来完成此任务?我会使用你最喜欢的绘画程序,并创建一个图像。将该图像设置为桌面背景,这样可以得到与代码中要求的结果相同的结果(并且更快)


如果必须对代码执行此操作,我将研究如何使用WPF。这将简化透明度问题。但是,你的桌面上仍然有一个应用程序。你将不得不处理这个问题(也许还有其他一些问题)

您不能在本机级别的桌面上绘图(可能不包括一些被黑客攻击的Win16支持,它会禁用合成和其他各种可怕的功能),因此当然不能使用
System.Drawing
。要做到这一点,您必须创建一个至少与图像大小相同的透明窗口并在其上进行绘制。

您不能在本机级别的桌面上进行绘制(可能不包括一些为支持Win16而进行的黑客攻击,这些攻击会禁用构图和其他各种可怕的功能),因此肯定不能使用
System.Drawing
。要做到这一点,您必须创建一个至少与图像大小相同的透明窗口,并在其上进行绘制。

尝试此操作时会出现大量问题。首先,你没有自己的桌面,所以你永远无法完全控制它何时失效

[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);
}

当它运行时,它将看起来很棒。但是,一旦您将表单移到中间或移动其他窗口,加号就会消失,因此您必须一次又一次地绘制它。

尝试此操作时会出现大量问题。首先,你没有自己的桌面,所以你永远无法完全控制它何时失效

[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);
}

当它运行时,它将看起来很棒。但是,一旦你将表单移到中间或移动其他窗口,加号就会消失,因此你必须一次又一次地绘制它。

Billy,我不认为这是一个过于复杂的问题,我只是不太熟悉图形库。虽然您的想法在理论上是可行的,但我更希望有一个用于此目的的实用程序。使用System.Drawing命名空间意味着您正在使用WinForms创建此应用程序。如果你进入GDI+图形,它会很快变得难看。我真的不知道如何在不使全屏窗口透明的情况下进行操作。你的问题还意味着你将把应用程序放在桌面上方。。。因此,您必须允许通过应用程序与桌面交互。我还可以想到其他一些问题。我不是这方面的专家,所以我也希望看到一种更简单的方法。比利,我担心情况会如此,衷心感谢你在这方面的反馈/建议。我想我会使用一个全屏透明窗口,用钢笔在表格上画画的作弊方法。比利,我不认为这是一个过于复杂的问题,我只是不太熟悉图形库。虽然您的想法在理论上是可行的,但我更希望有一个用于此目的的实用程序。使用System.Drawing命名空间意味着您正在使用WinForms创建此应用程序。如果你进入GDI+图形,它会很快变得难看。我真的不知道如何在不使全屏窗口透明的情况下进行操作。你的问题还意味着你将把应用程序放在桌面上方。。。因此,您必须允许通过应用程序与桌面交互。我还可以想到其他一些问题。我不是这方面的专家,所以我也希望看到一种更简单的方法。比利,我担心情况会如此,衷心感谢你在这方面的反馈/建议。我想我会使用一个全屏透明窗口,然后用钢笔在表格上画画的作弊方法。在某种程度上阐述了使用全屏透明窗口的想法,这不也会使钢笔在表格上透明吗?你是怎么做到的?透明并不意味着看不见。我可以给出一些关于如何实现它们的本地示例(我会使用
WS_EX_LAYERED
和实现
WM_PAINT
),但我对表单还不够熟悉,不知道它在表单中是否可行。PS:实际上,你希望窗口尽可能小,以提高性能。有点详细阐述了使用全屏透明窗口的想法,这不也会使笔在窗体上透明吗?你是怎么做到的?透明并不意味着看不见。我可以给出一些关于如何实现它们的本地示例(我会使用
WS_EX_LAYERED
和实现
WM_PAINT
),但我对表单还不够熟悉,不知道它在表单中是否可行。PS:实际上,您希望窗口尽可能小,以提高性能。漂亮且简单!我喜欢。正如你所说,它有几个洞,但工作的解释!好简单!我喜欢。正如你所说,它有几个洞,但作为解释