Есть ли простой способ получить RGB кисти, используемой для стирания фона окна? - PullRequest
0 голосов
/ 18 апреля 2019

Я ищу более простой способ (если он есть) выяснить, какой RGB использует кисть, которую Windows использует для стирания фона окна.

Проблема, которую я пытаюсь решить самым элегантным образом, заключается в следующем:

При регистрации класса я задаю кисть следующим образом:

      hbrBackground   := GetSysColorBrush(COLOR_WINDOW);

при обработке WM_PAINT я использую ExtTextOut, указав ETO_OPAQUE и прямоугольник (чтобы он его очищал).

В настоящее время я использую:

    SetBkColor(dc, GetSysColor(COLOR_WINDOW));

Это имеет очевидный недостаток: если кисть, используемая при регистрации класса, изменяется, программист должен помнить или знать, что такое же изменение должно быть сделано в инструкции SetBkColor, найденной в WM_PAINT. Это не хорошо.

Одним из способов решения этой проблемы является использование GetClassLongPtr для получения кисти фона, затем используйте GetObject для кисти, чтобы получить ее LOGBRUSH, который содержит RGB кисти, который можно передать в SetBkColor.

Мой вопрос: использование GetClassLongPtr с последующим GetObject - это самый простой способ получить значение RGB, которое мне нужно передать SetBkColor? Я надеюсь, что есть более простой (более простой) способ, чем этот.

Большое спасибо за вашу помощь.

PS: я ищу прямое API-решение на C / C ++ или Delphi. Нет .net или любое другое инфраструктурное решение.

...