C# WinForm 重定向绘制到位图,不显示任何屏幕

本文关键字:显示 任何 屏幕 位图 WinForm 重定向 绘制 | 更新日期: 2023-09-27 17:56:11

我想知道是否有任何方法可以禁用 winform 的屏幕绘制并仅绘制到位图。我实际上要实现的是创建基于表单的"实时图像",但不必实际使表单可见。

我在表单最小化时尝试了DrawToBitmap,但这非常不稳定,不起作用,最后崩溃了。

C# WinForm 重定向绘制到位图,不显示任何屏幕

好的,

所以我最终以不同的方式解决了这个问题。以下代码通过将隐藏的用户控件绘制到位图并将其用作缩略图来获取类似 Live Messenger 的任务栏缩略图。

将鼠标悬停在任务栏图标上仍然可以在左上角看到一些小东西。不会打扰我,但请告诉我您是否知道如何摆脱它!

确保您拥有 Microsoft 中的 Windows API 代码 Pck 以运行此 http://archive.msdn.microsoft.com/WindowsAPICodePack/Release/ProjectReleases.aspx?ReleaseId=4906

namespace AndreasCoroiu.Controls
{
    public partial class TaskbarThumbnail : UserControl
    {
        TaskbarForm taskbarForm;
        public TaskbarThumbnail()
        {
            InitializeComponent();
            if (!DesignMode)
            {
                taskbarForm = new TaskbarForm();
                TabbedThumbnail preview = new TabbedThumbnail(taskbarForm.Handle, taskbarForm.Handle);
                TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(preview);
                preview.TabbedThumbnailBitmapRequested += (o, e) =>
                {
                    Bitmap bmp = new Bitmap(Width, Height);
                    DrawToBitmap(bmp, new Rectangle(new Point(0, 0), bmp.Size));
                    preview.SetImage(bmp);
                    e.Handled = true;
                };
            }
        }
        public void Show()
        {
            taskbarForm.Show();
        }
        private class TaskbarForm : Form
        {
            public TaskbarForm()
                : base()
            {
                FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            }
            protected override void OnLoad(EventArgs e)
            {
                base.OnLoad(e);
                Size = new System.Drawing.Size(0, 0);
            }
        }
    }
}