使用 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);
        }
    }
}

但是当我运行它时,我的屏幕上什么也没显示。谁能帮我找出哪个部分出了问题?将不胜感激!

使用 C# 在桌面上绘图

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