Как сделать фон для текста группового блока прозрачным - PullRequest
2 голосов
/ 04 ноября 2008

Я хочу сделать прозрачный диалог. Я фиксирую сообщение 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. И я не хочу полностью рисовать элемент управления, чтобы избежать необходимости изменять код, если приложение переносится на другую ОС.

Спасибо

1012 * Хавьер *

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

Ответы [ 2 ]

1 голос
/ 06 октября 2012

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

1 голос
/ 06 ноября 2008

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

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

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

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

...