2011-07-09 13 views
0

次のコードを使用してDesktopWindowのデバイスコンテキストに文字列を書き込むと、背景色とテキストの色は同じになります(青色の白)。SetBkColorとSetTextColor DrawTextの背景とテキストの色を設定しない

Private Sub writeToScreen(txt As String) 
Declare Function GetDesktopWindow Lib "user32"() As Integer 
Declare Function DrawTextW Lib "user32" (hdc As Integer, lpStr As WString, nCount As Integer, _ 
    ByRef lpRect As RECT, wFormat As Integer) As Integer 
Declare Function CreateDCA Lib "gdi32" (lpDriverName As CString, lpDeviceName As Integer, _ 
    lpOutput As Integer, lpInitData As Integer) As Integer 
Declare Function DeleteDC Lib "gdi32" (hdc As Integer) As Integer 
Declare Function GetTextColor Lib "gdi32" (hdc As Integer) As Color 
Declare Function SetTextColor Lib "gdi32" (hdc As Integer, crColor As Color) As Color 
Declare Function GetBkColor Lib "gdi32" (hdc As Integer) As Color 
Declare Function SetBkColor Lib "gdi32" (hdc As Integer, crColor As Color) As Color 

Const DT_MULTILINE = &H00000001 
Const DT_NOCLIP = &H100 
Const INVALID_COLOR = &hFFFFFFFF 

Dim tFormat As Integer = DT_MULTILINE Or DT_NOCLIP 
Dim hdc As Integer = CreateDCA("DISPLAY", 0, 0, 0) 
Dim tRect As RECT //The RECT structure is defined elsewhere 
Dim textCol, backColor As Color 

tR.Left = 200 
tR.Top = 250 
tR.Right = 600 
tR.Bottom = 350 
textCol = SetTextColor(hdc, &cFF8040) 
backColor = SetBkColor(hdc, &c000000) 

If DrawTextW(hdc, txt, Len(txt), tR, tFormat) = 0 Then 
    System.DebugLog("Text Draw Error") 
End If 

Call SetTextColor(hdc, textCol) 
Call SetBkColor(hdc, backColor) 
Call DeleteDC(hdc) 
End Sub 

私は間違っていますか?テキストはうまく書かれますが、色は醜いです。

+5

**あなたが間違っている主なことは、デスクトップに直接描画することです** **あなたは**決してそれを行うことになっています。あなたはデスクトップウィンドウを所有していません。 Windowsはデスクトップウィンドウを所有しています。そして、あなたが幼児のように学んだのと同じように、自分が所有していないものを盗んだり破棄したりするべきではありません。さて、あなたのアプリケーションを再設計してください。 –

+0

代わりにGraphics.FromHdc()とTextRenderer.DrawText()を使用してください。 –

+0

@Cody Greyそこに議論はありませんが、それは私が尋ねたものではありません。 –

答えて

1

DCを設定して背景を描画しないようにSetBkMode()(http://msdn.microsoft.com/en-us/library/dd162965%28v=vs.85%29.aspx)を使用します。

SetTextColor()はDrawText()ではなくTextOut()にのみ使用され、IIRC - MSDNではあいまいです。他のHBRUSHをDCにセレクトしてみてください。

+0

ありがとう、それはそれでした:) –

関連する問題