使用 C# 在桌面上绘图
Drawing on the Desktop using C#
我正在尝试使用 C# 在桌面上绘制一个矩形。在找到一些解决方案后,我得到了这些:
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
[DllImport("User32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
static extern int ReleaseDC(IntPtr hwnd, IntPtr dc);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
myFunc();
}
public void myFunc()
{
IntPtr desktop = GetDC(IntPtr.Zero);
using (Graphics g = Graphics.FromHdc(desktop))
{
g.FillRectangle(Brushes.Red, 0, 0, 100, 100);
}
ReleaseDC(IntPtr.Zero, desktop);
}
}
}
但是当我 运行 它时,我的屏幕上什么也没有。谁能帮我找出是哪部分出了问题?将不胜感激!
您不需要为此导入 DLL。使用表单绘制事件并获取图形对象,如下所示:
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(new Pen(Color.Black,3),x,y,width,height);
}
可能 windows 会刷新您的屏幕,这就是为什么您在屏幕上看不到矩形的原因。
以下建议可能不是完美的解决方案,但它可能会帮助您使代码正常工作。
按照@vivek verma 的建议向您的表单添加一个绘制处理程序,并将您的代码移入此绘制处理程序
private void Form1_Paint(object sender, PaintEventArgs e)
{
IntPtr desktop = GetDC(IntPtr.Zero);
using (Graphics g = Graphics.FromHdc(desktop))
{
g.FillRectangle(Brushes.Red, 0, 0, 100, 100);
}
ReleaseDC(IntPtr.Zero, desktop);
}
当您的表单被重新绘制时,这将使矩形在您的屏幕上被重新绘制。但还是要记住,当windows.
刷新屏幕时,你在屏幕上的绘图就会消失
编辑:
这里 draw on screen without form 也有一个很好的 post 建议使用无边框形式的替代解决方案。
我正在尝试使用 C# 在桌面上绘制一个矩形。在找到一些解决方案后,我得到了这些:
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
[DllImport("User32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
static extern int ReleaseDC(IntPtr hwnd, IntPtr dc);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
myFunc();
}
public void myFunc()
{
IntPtr desktop = GetDC(IntPtr.Zero);
using (Graphics g = Graphics.FromHdc(desktop))
{
g.FillRectangle(Brushes.Red, 0, 0, 100, 100);
}
ReleaseDC(IntPtr.Zero, desktop);
}
}
}
但是当我 运行 它时,我的屏幕上什么也没有。谁能帮我找出是哪部分出了问题?将不胜感激!
您不需要为此导入 DLL。使用表单绘制事件并获取图形对象,如下所示:
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(new Pen(Color.Black,3),x,y,width,height);
}
可能 windows 会刷新您的屏幕,这就是为什么您在屏幕上看不到矩形的原因。
以下建议可能不是完美的解决方案,但它可能会帮助您使代码正常工作。
按照@vivek verma 的建议向您的表单添加一个绘制处理程序,并将您的代码移入此绘制处理程序
private void Form1_Paint(object sender, PaintEventArgs e)
{
IntPtr desktop = GetDC(IntPtr.Zero);
using (Graphics g = Graphics.FromHdc(desktop))
{
g.FillRectangle(Brushes.Red, 0, 0, 100, 100);
}
ReleaseDC(IntPtr.Zero, desktop);
}
当您的表单被重新绘制时,这将使矩形在您的屏幕上被重新绘制。但还是要记住,当windows.
刷新屏幕时,你在屏幕上的绘图就会消失编辑: 这里 draw on screen without form 也有一个很好的 post 建议使用无边框形式的替代解决方案。