使用 C# 在桌面上绘图
本文关键字:绘图 桌面 使用 | 更新日期: 2023-09-27 18:33:29
我正在尝试使用 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);
}
}
}
但是当我运行它时,我的屏幕上什么也没显示。谁能帮我找出哪个部分出了问题?将不胜感激!
Windows可能会刷新您的屏幕,这就是为什么您在屏幕中看不到矩形的原因。
下面的建议可能不是一个完美的解决方案,但它可以帮助你让你的代码工作。
按照 verma 的建议将油漆处理程序添加到窗体@vivek并将代码移动到此油漆处理程序中
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);
}
这将在重新绘制窗体时在屏幕中重新绘制矩形。但仍然记住,当屏幕被窗口刷新时,您在屏幕上的绘图将消失。
编辑:这里还有一个很好的帖子,在没有形式的屏幕上绘制,建议使用无边框形式的替代解决方案。
您不需要为此导入 DLL。使用窗体绘制事件并获取图形对象,如下所示:
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(new Pen(Color.Black,3),x,y,width,height);
}