GdipDrawString неправильно отображает текст - PullRequest
0 голосов
/ 29 октября 2018

Я новичок в GDI + и пытаюсь изменить программу так, чтобы она рисовала черный прямоугольник над указанным объектом, а затем отображала текст, описывающий, что такое закрытый объект.Мне удалось отобразить черный прямоугольник, но я застрял при работе GdipDrawString.Я достиг точки, когда я больше не получаю никаких ошибок компиляции или выполнения, но текст по-прежнему не отображается заметно.

Вот упрощенная версия функции с вызовом GdipDrawString:

def doPaint(hwnd):
    rect = RECT()
    windll.user32.GetClientRect(c_int(hwnd), byref(rect))
    ps = PAINTSTRUCT()
    hdc = windll.user32.BeginPaint(c_int(hwnd), byref(ps))
    windll.user32.FillRect(hdc, byref(rect), blackBrush)
    gdiplus.GdipDrawString("TEST", font, whiteBrush, byref(rect)) 
    windll.user32.EndPaint(c_int(hwnd), byref(ps))

Вот определения некоторых наиболее значимых произведений:

blackBrush = windll.gdi32.CreateSolidBrush(blackColor)
whiteBrush = windll.gdi32.CreateSolidBrush(whiteColor)

class RECT(Structure):
    _fields_ = [('left', c_long),
                ('top', c_long),
                ('right', c_long),
                ('bottom', c_long)]

font = windll.gdi32.CreateFontW(48, 0, 0, 0, weight, False, False, False,
       charSet, outPrecision, clipPrecision, quality, family | pitch, "")

Любое руководство будет высоко ценится!Я использовал строковый литерал для простоты во время тестирования и поиграл с указанными значениями шрифта, потому что я не уверен, почему иначе FillRect будет работать, но не DrawString.Меняя местами кисти, используемые для FillRect и DrawString, вы получите белый прямоугольник без текста.

...