Visual Studio 2005: статический текстовый элемент управления не будет отображаться с прозрачным фоном

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

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


person BeachRunnerFred    schedule 15.01.2009    source источник


Ответы (3)


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

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

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

person Joel    schedule 16.01.2009

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

person Nick    schedule 15.01.2009

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

person Anthony Johnson    schedule 15.01.2009