繁体   English   中英

SetBkColor 和 SetTextColor 不要为 DrawText 设置背景和文本颜色

[英]SetBkColor and SetTextColor Don't set the background and text color for DrawText

使用以下代码将字符串写入 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

我究竟做错了什么? 文字写得很好,但 colors 很难看。

首先使用 SetBkMode() (http://msdn.microsoft.com/en-us/library/dd162965%28v=vs.85%29.aspx) 将 DC 设置为不绘制背景。

SetTextColor() 仅用于 TextOut(),而不是 DrawText(),IIRC - MSDN 对此不明确。 尝试在 DC 中选择不同的 HBRUSH,这可能会满足您的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM