SetBkColor и SetTextColor Не устанавливать фон и цвет текста для DrawText - PullRequest
0 голосов
/ 09 июля 2011

Использование следующего кода для записи строки в контекст устройства DesktopWindow работает, но цвет фона и цвет текста остаются одинаковыми (белый на синем):

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

Что я делаю не так? Текст пишется просто отлично, но цвета уродливы.

1 Ответ

1 голос
/ 18 июля 2011

Используйте SetBkMode () (http://msdn.microsoft.com/en-us/library/dd162965%28v=vs.85%29.aspx) сначала, чтобы установить DC не рисовать фон.

SetTextColor () используется только для TextOut (), но не DrawText (), IIRC - MSDN неоднозначен напопробуйте выбрать другой HBRUSH в DC, который может делать то, что вы хотите.

...