Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WinForm将绘图重定向到位图,不将任何内容重定向到屏幕_C#_.net_Winforms_Drawing - Fatal编程技术网

C#WinForm将绘图重定向到位图,不将任何内容重定向到屏幕

C#WinForm将绘图重定向到位图,不将任何内容重定向到屏幕,c#,.net,winforms,drawing,C#,.net,Winforms,Drawing,我想知道是否有任何方法可以禁用winform的屏幕绘制,而只绘制位图。我实际上想要实现的是基于表单创建一个“实时图像”,但不必让表单实际可见 当表单最小化时,我尝试了DrawToBitmap,但它非常不稳定,无法工作,最终崩溃。好的,所以我最终以一种不同的方式解决了这个问题。下面的代码通过将隐藏的用户控件绘制到位图并将其用作缩略图,为您获得类似于Live Messenger的任务栏缩略图 将鼠标放在任务栏图标上仍然可以在左上角看到一些小东西。不打扰我,但请告诉我,如果你知道如何摆脱它 请确保您具

我想知道是否有任何方法可以禁用winform的屏幕绘制,而只绘制位图。我实际上想要实现的是基于表单创建一个“实时图像”,但不必让表单实际可见


当表单最小化时,我尝试了DrawToBitmap,但它非常不稳定,无法工作,最终崩溃。

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

将鼠标放在任务栏图标上仍然可以在左上角看到一些小东西。不打扰我,但请告诉我,如果你知道如何摆脱它

请确保您具有Microsoft提供的Windows API代码Pck以运行此操作


也许你应该解释一下“高度不稳定”和“崩溃”是什么意思。也许您使用该函数的代码中有一个bug?这很正常,但它不起作用,因为DrawToBitmap导致表单的某种最小化表示。
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);
            }
        }
    }
}