Visual Studio 2005: статический текстовый элемент управления не отображается на прозрачном фоне - PullRequest
3 голосов
/ 15 января 2009

Я использую редактор диалогов в Visual Studio 2005, чтобы создать диалоговое окно со статическим текстовым элементом управления. Мне бы хотелось, чтобы фон статического текстового элемента управления был прозрачным, поскольку я использую статический элемент управления изображения под ним, а серый текстовый фон выглядит отвратительно. В редакторе я установил для атрибута «Прозрачный» значение «Истина», и он заставляет фон стать прозрачным, как я хочу. Но как только я запускаю свое приложение и изменяю текст с помощью SendMessage (hText, WM_SETTEXT, 0L, "newtext"), фон теряет прозрачность и снова становится серым. Есть идеи? Кстати, я делаю это в C ++.

Заранее спасибо за помощь!

Ответы [ 3 ]

2 голосов
/ 16 января 2009

Как сказал Энтони Джонсон, обработайте сообщение WM_CTLCOLORSTATIC в диалоговом окне (вам не нужно обрабатывать WM_NOTIFY - я все равно не верю, что статические элементы управления используют это сообщение). Но этого недостаточно, чтобы установить прозрачный фоновый режим. Вы также должны установить кисть фона на нулевую кисть. Примерно так должно работать (в вашем DialogProc):

case WM_CTLCOLORSTATIC:
    SetBkMode((HDC)wParam, TRANSPARENT);
    return (INT_PTR)(HBRUSH)GetStockObject(NULL_BRUSH);

Если вы измените текст на статическом элементе управления, возможно, вам придется сделать недействительным то, что находится под ним, чтобы он правильно рисовал при этом.

1 голос
/ 15 января 2009

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

0 голосов
/ 15 января 2009

Я не знаю, как вы можете сделать это в диалоговом редакторе, но если вы обработаете сообщение WM_NOTIFY в родительском окне статики, статическое будет отправлять сообщение WM_CTLCOLORSTATIC до рисования статики. Там, если вы вызываете SetBkMode ((HDC) wParam, TRANSPARENT); это должно сделать статический фон прозрачным.

...