Pracuję nad aplikacją Win32 GUI, używając prostego interfejsu API Win32 (bez MFC lub .NET). Problem, który mam, sprawia, że kontrole są przejrzyste. Mam wymyślić sposób, który działa dla większości rzeczy, Windows Vista + robię to w WndProc:Sterowniki Win32 przejrzyste we wszystkich wersjach systemu Windows
case WM_CTLCOLORSTATIC:
{
SetBkMode((HDC)wParam, TRANSPARENT);
return (INT_PTR)::GetStockObject(NULL_PEN);
}
break;
W systemie Windows XP, robię to w WndProc:
case WM_CTLCOLORSTATIC:
{
HBRUSH hbr = (HBRUSH)DefWindowProc(hDlg, message, wParam, lParam);
::DeleteObject(hbr);
SetBkMode((HDC)wParam, TRANSPARENT);
return (LRESULT)(HBRUSH)(COLOR_WINDOW);
}
teraz działa to dla większości kontrolek, jednak otrzymuję przezroczyste tło na etykiecie na górze kontrolki skrzynki grupowej, która rysuje linię pola grupy przez tekst. Zacząłem pracować nad skrzynką na skrzynki grupowe, ale jestem pewien, że jest to problem, który musiał być wcześniej rozwiązany i nie chcę ponownie wymyślać koła.
Czy wypróbowana i sprawdzona metoda sterowania wydaje się być przezroczysta?
Dzięki J
Nie sądzę, że powinieneś usunąć taki pędzel ... – Anders
Czy jesteś pewien, że kanał alfa jest dostępny na wszystkich platformach, które chcesz? A co z osobami, które muszą korzystać z Twojej aplikacji na komputerze z usługami terminalowymi, zdalnym pulpitem lub serwerem Windows?Co masz na myśli przez "Wszystkie wersje systemu Windows"? Windows 98? To także Win32! Może mógłbyś powiedzieć "Wszystkie wersje systemu Windows z Windows XP i nowszych", jeśli o to ci chodzi. –
Prawdopodobnie masz rację, działa, czy usunę szczotki, czy nie. Nie pamiętam, skąd wziąłem ten kod od teraz, ale było wyjaśnienie, dlaczego pędzel został usunięty w ten sposób. – JWood