Sto lavorando a un'applicazione GUI Win32 utilizzando l'API Win32 normale (senza MFC o .NET). Il problema che sto riscontrando è che i controlli appaiono trasparenti. Mi è venuta in mente un metodo che funziona per la maggior parte delle cose, in Windows Vista + faccio questo nel WndProc:Controlli Win32 trasparenti su tutte le versioni di Windows
case WM_CTLCOLORSTATIC:
{
SetBkMode((HDC)wParam, TRANSPARENT);
return (INT_PTR)::GetStockObject(NULL_PEN);
}
break;
In Windows XP, lo faccio nel WndProc:
case WM_CTLCOLORSTATIC:
{
HBRUSH hbr = (HBRUSH)DefWindowProc(hDlg, message, wParam, lParam);
::DeleteObject(hbr);
SetBkMode((HDC)wParam, TRANSPARENT);
return (LRESULT)(HBRUSH)(COLOR_WINDOW);
}
Ora questo funziona per la maggior parte dei controlli, tuttavia ottengo uno sfondo trasparente sull'etichetta sulla parte superiore di un controllo di casella di gruppo che disegna la linea di casella di gruppo attraverso il testo. Ho iniziato a lavorare su un caso per le sole scatole di gruppo, ma sono sicuro che questo è un problema che deve essere stato risolto prima e non voglio reinventare la ruota.
Esiste un metodo collaudato per rendere trasparenti i controlli?
Grazie, J
Non penso che dovresti eliminare il pennello in questo modo ... – Anders
Sei sicuro che il canale alfa sia disponibile su tutte le piattaforme che desideri? Che dire delle persone che devono utilizzare la tua app su un PC con Servizi terminal, Desktop remoto o Windows Server?Cosa intendi con "Tutte le versioni di Windows"? Windows 98? Anche questo è Win32! Forse potresti dire "Tutte le versioni di Windows da Windows XP e successive" se è questo che intendi. –
Probabilmente hai ragione, funziona se cancello il pennello o meno. Non ricordo da che ora ho preso quel codice, ma c'era una spiegazione sul motivo per cui il pennello veniva cancellato in quel modo. – JWood