仅仅使用C#控制台而不是C#Forms Application就可以在屏幕上创建一个大的白色矩形?在没有窗体的屏幕上绘制
如果可能,它应该覆盖整个屏幕。 我知道我必须使用System.Drawing并尝试了几个步骤,但实际上没有人会在我的屏幕上打印任何内容!
仅仅使用C#控制台而不是C#Forms Application就可以在屏幕上创建一个大的白色矩形?在没有窗体的屏幕上绘制
如果可能,它应该覆盖整个屏幕。 我知道我必须使用System.Drawing并尝试了几个步骤,但实际上没有人会在我的屏幕上打印任何内容!
你需要System.Drawing
和System.Runtime.InteropServices
。您可能需要为其添加项目引用。
using System.Runtime.InteropServices;
using System.Drawing;
添加的方法添加到类的P/Invoke
[DllImport("User32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
public static extern void ReleaseDC(IntPtr hwnd, IntPtr dc);
获取整个屏幕Graphics
对象,并绘制它的矩形:
IntPtr desktopPtr = GetDC(IntPtr.Zero);
Graphics g = Graphics.FromHdc(desktopPtr);
SolidBrush b = new SolidBrush(Color.White);
g.FillRectangle(b, new Rectangle(0, 0, 1920, 1080));
g.Dispose();
ReleaseDC(IntPtr.Zero, desktopPtr);
与此问题方法是,如果屏幕刷新完毕,矩形将被覆盖,使其在大多数实际应用中无用。
和以前一样,你需要的项目引用。这次到System.Windows.Forms
。您还将再次需要System.Drawing
:
using System.Drawing;
using System.Windows.Forms;
使新的形式,去掉它的边界,它填满整个屏幕,并把它放在任务栏的顶部:
Form f = new Form();
f.BackColor = Color.White;
f.FormBorderStyle = FormBorderStyle.None;
f.Bounds = Screen.PrimaryScreen.Bounds;
f.TopMost = true;
Application.EnableVisualStyles();
Application.Run(f);
一个可能的问题与这是用户可以将Alt + Tab从窗口中移开。如果你想做更复杂的图形,你需要编写一些图形代码,如this。要使表单背景透明,请将其TransparentKey
设置为与其Backolor
相同。
这就是我要找的 – user1988147
这真的很不错! – user1988147
是的,它可以绘制到屏幕上,但它可能更容易使用最顶级的无边界形式。
如果必须的话,还可以通过控制台应用程序执行此操作,以便引用必要的程序集,但这会导致控制台窗口在应用程序的整个生命周期中保留在屏幕上。
this.TopMost = true;
this.FormBorderStyle = FormBorderStyle.None;
另外,我相信你可以创建Window
一个实例,并调用该Show
。
This answer to a different question解释了如何使用GDI +调用直接画到屏幕。
thx到目前为止,但我想绘制这个控制台窗口以外 – user1988147
我明白这个问题的方式,这在任何有意义的方式都不可能实现。我想你可以通过平台调用user32.dll和gdi32.dll,并通过消息循环等方式实现一个经典的Windows UI应用程序,但使用Forms会更简单。你不能这样做的原因是什么?
我不明白downvoters没有理由,你是什么问题的人? –
对我来说,这应该是一个评论。这不仅仅是一个答案,而是一个问题。 –
您是否要求一种在控制台窗口外绘制的方法? – Tharwen
@Tharwen是啊我的意思是 – user1988147