2013-03-23 146 views
0

我使用Visual Basic.Net並在屏幕上繪製圖形。在屏幕上繪製圖形

這裏是我的代碼:

Private Sub Button1_Click(ByVal sender As System.Object, 
          ByVal e As System.EventArgs) Handles Button1.Click 
Dim gr As Graphics = Graphics.FromHwnd(New IntPtr(0)) 
gr.DrawString("text on screen", 
       New Font(Me.Font.FontFamily, 25, 
       FontStyle.Regular), Brushes.Red, 50, 50) 
End Sub 

在上面的代碼,文字在屏幕上繪製。我的問題是:我如何刪除繪製到屏幕上的文本?我發現有一個.Clear方法,但是,這個'清除整個繪圖表面並使用指定的背景顏色填充它',而不是僅僅刪除繪製的文本。

在此先感謝。

編輯

我想開發一個潛意識信息的應用程序將在用戶使用其他應用程序在屏幕上顯示的消息。透明表單是做這件事的最好方法嗎?

+0

這不是一種合適的繪畫方式。無論你畫什麼,都可以隨時擦除。恢復時遇到問題僅僅是爲什麼你不應該這樣做的另一個例子。創建你自己的窗口。它不一定是可見的,請使用Form.TransparencyKey屬性。 – 2013-03-23 02:46:17

+0

此外,'IntPtr.Zero'是***不***如何得到桌面窗口句柄。參見'GetDesktopWindow()' – 2013-03-23 03:09:10

+0

'InvalidateRect()'可能適用於清除繪製的文本。 – 2013-03-23 03:12:29

回答

0

我發現下面的代碼工作:

Private WithEvents TextForm As New Form 
Private Zipper As New FontFamily("Zipper") 

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    With TextForm 
     .BackColor = Color.DimGray 
     .TransparencyKey = Color.DimGray 
     .FormBorderStyle = Windows.Forms.FormBorderStyle.None 
     .ShowInTaskbar = False 
     .WindowState = FormWindowState.Maximized 
     .Opacity = 0 
     .Show(Me) 
    End With 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Static showText As Boolean 
    showText = Not showText 
    If showText Then TextForm.Opacity = 0.99 Else TextForm.Opacity = 0 
End Sub 

Private Sub TextForm_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles TextForm.Paint 
    e.Graphics.DrawString("text on screen 12345", New Font(Zipper, 30, FontStyle.Bold), Brushes.Red, 50, 50) 
End Sub 
0

採取不同的位圖和繪製每一個新事物在不同的位圖和合並後用舊的新的位圖。當你想刪除文本重新加載沒有文字的舊位圖。 搜索在新位圖中繪圖並保存繪圖。