Visual Studio 2005: статический текстовый элемент управления не отображается на прозрачном фоне
Я использую редактор диалогов в Visual Studio 2005 для создания диалогового окна со статическим текстовым элементом управления. Мне бы хотелось, чтобы фон статического текстового элемента управления был прозрачным, так как я использую статический элемент управления изображения под ним, а серый текстовый фон выглядит отвратительно. В редакторе я установил для атрибута "Прозрачный" значение "Истина", и он заставляет фон стать прозрачным, как я хочу. Но как только я запускаю свое приложение и изменяю текст с помощью SendMessage(hText, WM_SETTEXT, 0L, "newtext"), фон теряет прозрачность и снова становится серым. Есть идеи? Кстати, я делаю это на C++.
Заранее спасибо за помощь!
3 ответа
Как сказал Энтони Джонсон, WM_CTLCOLORSTATIC
сообщение в диалоговом окне (вам не нужно обрабатывать WM_NOTIFY
- Во всяком случае, я не верю, что статическое управление использует это сообщение). Но этого не достаточно, чтобы установить прозрачный фоновый режим. Вы также должны установить кисть фона на нулевую кисть. Нечто подобное должно работать (в вашем DialogProc):
case WM_CTLCOLORSTATIC:
SetBkMode((HDC)wParam, TRANSPARENT);
return (INT_PTR)(HBRUSH)GetStockObject(NULL_BRUSH);
Если вы измените текст в статическом элементе управления, возможно, вам придется сделать недействительным то, что находится под ним, чтобы он правильно рисовал, когда вы это делаете.
Попробуйте скрыть элемент управления, затем установить текст, а затем показать его.
Я не знаю, как вы можете сделать это в диалоговом редакторе, но если вы обрабатываете сообщение WM_NOTIFY в родительском окне статики, статическое будет отправлять сообщение WM_CTLCOLORSTATIC до рисования статики. Там, если вы вызываете SetBkMode((HDC)wParam, TRANSPARENT);, это должно сделать статический фон прозрачным.