Изменить цвет фона окна, используя дескриптор IntPtr - PullRequest
2 голосов
/ 13 октября 2008

В c # у меня есть дескриптор окна (IntPtr), я хочу изменить цвет фона этого окна. Как я могу это сделать?

Я могу получить графический объект GDI для этого дескриптора следующим образом:

Графика графика = Графика. От руки (theHandle);

Значит, я должен каким-то образом изменить цвет фона из этого?

Я также хочу убедиться, что цвет фона сохраняется даже после перемещения, изменения размеров, перерисовки и т. Д.

Ответы [ 2 ]

2 голосов
/ 13 октября 2008

Я не думаю, что есть способ сделать это напрямую с собственным окном (C / C ++) (т. Е. Нет собственного GDI-аналога Control.BackColor).

Из просмотра в Reflector видно, что Control использует свойство BackColor для ответа на различные сообщения WM_CTLCOLOR * (например, WM_CTLCOLOREDIT). Итак, если вы хотите изменить цвет фона собственного элемента управления, вам может потребоваться создать подкласс этого окна и ответить на это же сообщение. Если собственное окно не является элементом управления, вам все равно придется создать подкласс окна, но вместо этого вам придется обрабатывать WM_PAINT или WM_ERASEBKGND .

Попробуйте эту ветку на programmersheaven.com для предложения о том, как создать подкласс собственного окна из C #.

0 голосов
/ 13 октября 2008

Создайте класс элемента управления с помощью метода Control.FromHandle, а затем установите свойство.

Что-то вроде ...

    Control someControl = Control.FromHandle(myHandle);
    someControl.BackColor = SystemColors.Black;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...