2008-11-03 3 views
2

Я хочу сделать прозрачный диалог. Я захватить сообщение OnCtlColor в CDialog производного класса ... это код:Как сделать текст текстового поля группового поля прозрачным

HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
    if(bSetBkTransparent_) 
    { 
     pDC->SetBkMode(TRANSPARENT); 
     hbr = (HBRUSH)GetStockObject(NULL_BRUSH);   
    } 


    return hbr; 
} 

Он отлично работает для всех элементов управления, но группа-бокс (CStatic). Все метки (CStatic) окрашены прозрачным текстовым фоном, но текст группового окна не прозрачен.

Я уже искал это для поиска, но не нашел решения. Кто-нибудь знает, как сделать настоящий прозрачный групповой ящик?

Кстати, я работаю в Windows XP. И я не хочу полностью рисовать элемент управления, чтобы не менять код, если приложение переносится в другую ОС.

Спасибо,

Хавьер

Примечание: В конце концов я изменил диалог, так что мне не нужно, чтобы сделать его прозрачным. Во всяком случае, я добавляю эту информацию, потому что, возможно, кто-то все еще пытается это сделать. Групповой бокс - это не CStatic, а CButton (я знаю, что это не ново). Я изменил тему Windows XP на классическую Windows, а затем групповое backgraund было прозрачным. Плохое то, что в этом случае рамка становится видимой под текстом ... поэтому, если кто-то следит за этим подходом, я думаю, что он лучше будет следовать совету Адзма.

+0

Я просто пробовал это в очень быстром тесте, и текст группового поля прозрачен (в той степени, в которой даже текст группы отображается под текстом). Возможно, ваша проблема не в приведенном выше коде: вы можете попробовать сделать небольшую демонстрационную тестовую программу. – DavidK 2008-11-04 10:12:30

ответ

1

У вас есть два варианта.

Вы не можете использовать Common Controls v6 (элементы управления XP-Styled), которые заставят ваше приложение потерять причудливость новых версий Windows. Однако IIRC groupbox будет уважать проблему CTLCOLOR. Если вы все равно не используете его, и он по-прежнему не соответствует вашему цвету, тогда у вас есть только один вариант ...

Который должен сделать это самостоятельно. Я знаю, что ты сказал, что не хочешь, но иногда приходится. К счастью, групповой ящик - очень простой элемент управления. На этой странице есть пример для рисования группового поля в классическом стиле: http://www.codeguru.com/cpp/controls/controls/groupbox/article.php/c2273/ Вы также можете сделать его очень просто, используя библиотеки UxTheme, которые поставляются с XP +.

Если приложение будет перенесено в другую ОС, у вас будет много возможностей для миграции на приложение MFC в целом. Если это ваша цель, вы должны действительно изучить разработку кросс-платформенного инструментария пользовательского интерфейса.

1

Просто установите стиль расширенного окна WS_EX_TRANSPARENT для группового окна.

Смежные вопросы