我正在尝试创建一个非常小的c#实用程序应用程序,它将利用System.Drawing在我的桌面上绘制一个全屏,静态,固定的十字准线,以便我可以将一些桌面项目与相关的屏幕中心对齐。
我试着查看一些例子,但没有提出很多,并且想知道是否有人在这方面有任何经验。
如果可能,我宁愿不制作透明的全屏窗口来完成这项专长。
答案 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。它将简化透明度问题。但是,您仍然可以在桌面顶部使用应用程序。你将不得不处理这个问题(也许还有其他一些问题)。