2013-01-17 39 views
18

仅仅使用C#控制台而不是C#Forms Application就可以在屏幕上创建一个大的白色矩形?在没有窗体的屏幕上绘制

如果可能,它应该覆盖整个屏幕。 我知道我必须使用System.Drawing并尝试了几个步骤,但实际上没有人会在我的屏幕上打印任何内容!

+1

您是否要求一种在控制台窗口外绘制的方法? – Tharwen

+0

@Tharwen是啊我的意思是 – user1988147

回答

38

方法1:调用Windows API

你需要System.DrawingSystem.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); 

与此问题方法是,如果屏幕刷新完毕,矩形将被覆盖,使其在大多数实际应用中无用。

方法2:创建一个无国界的形式

和以前一样,你需要的项目引用。这次到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相同。

我刚刚在.NET 4.5和Windows 7中测试了这两个,因此它可能与早期版本不同。更多信息herehere

+0

这就是我要找的 – user1988147

+0

这真的很不错! – user1988147

5

是的,它可以绘制到屏幕上,但它可能更容易使用最顶级的无边界形式。

如果必须的话,还可以通过控制台应用程序执行此操作,以便引用必要的程序集,但这会导致控制台窗口在应用程序的整个生命周期中保留在屏幕上。

this.TopMost = true; 
this.FormBorderStyle = FormBorderStyle.None; 

另外,我相信你可以创建Window一个实例,并调用该Show

This answer to a different question解释了如何使用GDI +调用直接画到屏幕。

+0

thx到目前为止,但我想绘制这个控制台窗口以外 – user1988147

2

我明白这个问题的方式,这在任何有意义的方式都不可能实现。我想你可以通过平台调用user32.dll和gdi32.dll,并通过消息循环等方式实现一个经典的Windows UI应用程序,但使用Forms会更简单。你不能这样做的原因是什么?

+0

我不明白downvoters没有理由,你是什么问题的人? –

+2

对我来说,这应该是一个评论。这不仅仅是一个答案,而是一个问题。 –