Прозрачные элементы управления Win32 во всех версиях Windows

Я работаю над приложением Win32 с графическим интерфейсом, используя простой Win32 API (без MFC или .NET). У меня проблема заключается в том, что элементы управления выглядят прозрачными. Я придумал метод, который работает для большинства вещей, в Windows Vista + я делаю это в WndProc:

case WM_CTLCOLORSTATIC:
{
    SetBkMode((HDC)wParam, TRANSPARENT);
    return (INT_PTR)::GetStockObject(NULL_PEN);
}
break;

В Windows XP я делаю это в WndProc:

case WM_CTLCOLORSTATIC:
{
    HBRUSH hbr = (HBRUSH)DefWindowProc(hDlg, message, wParam, lParam);
    ::DeleteObject(hbr);
    SetBkMode((HDC)wParam, TRANSPARENT);
    return (LRESULT)(HBRUSH)(COLOR_WINDOW);
}

Теперь это работает для большинства элементов управления, однако я получаю прозрачный фон на этикетке в верхней части элемента управления группового поля, который рисует линию группового поля через текст. Я начал работать над случаем только для групповых ящиков, но я уверен, что это проблема, которая должна была быть решена раньше, и я не хочу снова изобретать колесо.

Есть ли испытанный и проверенный метод за то, что элементы управления выглядят прозрачными?

Спасибо, J

5
задан JWood 13 December 2010 в 15:42
поделиться