Je souhaite créer une boîte de dialogue transparente. Je capture le message OnCtlColor dans une classe dérivée CDialog ... c'est le code:Comment rendre l'arrière-plan du texte de la boîte de groupe transparent
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;
}
Il fonctionne très bien pour toutes les commandes mais le groupe boîte (CStatic). Toutes les étiquettes (CStatic) sont peintes avec un fond de texte transparent mais le texte de la boîte de groupe n'est pas transparent.
je l'ai déjà googlé pour cela, mais je n'ai pas trouvé des solutions. Est-ce que quelqu'un sait comment faire une vraie boîte de groupe transparente? En passant, je travaille sous Windows XP. Et je ne veux pas dessiner complètement le contrôle pour éviter d'avoir à changer le code si l'application est migrée vers un autre système d'exploitation.
Merci,
Javier
Note: J'ai finalement changé la boîte de dialogue pour que je ne ai pas besoin pour le rendre transparent. Quoi qu'il en soit, j'ajoute cette information car peut-être que quelqu'un essaie toujours de le faire. Le groupbox n'est pas un CStatic mais un CButton (je sais que ce n'est pas nouveau). J'ai changé le thème de Windows XP en Windows classique, puis le backgraund groupbox était transparent. La mauvaise nouvelle est que dans ce cas, la ligne de cadre devient visible sous le texte ... donc si quelqu'un suit cette approche, je pense qu'il pourrait peut-être mieux suivre le conseil de l'Adzm.
Je viens d'essayer ceci dans un test très rapide, et le texte de la boîte de groupe est transparent (dans la mesure où même la boîte de groupe est visible sous le texte). Il se peut que votre problème ne soit pas dans le code ci-dessus: vous pouvez essayer un programme de test de démonstration minimal et rapide. – DavidK