Afin de faire du "bon" alpha dans une fenêtre en couches, vous devez fournir au gestionnaire de fenêtres un bitmap PARGB par un appel à UpdateLayeredWindow
.
La propre façon d'atteindre ce que je connaisse est le suivant:
- Créer un objet GDI +
Bitmap
avec le format de pixel PixelFormat32bppPARGB
. Créez un objet Graphics
pour dessiner dans cet objet Bitmap
.
- Faites tout votre dessin dans cet objet en utilisant GDI +.
- détruire l'objet
Graphics
créé à l'étape 2.
- Appelez la méthode
GetHBITMAP
sur l'objet Bitmap
pour obtenir Windows HBITMAP
.
- Détruisez l'objet
Bitmap
.
- Créez une mémoire CC à l'aide de
CreateCompatibleDC
et sélectionnez HBITMAP
à partir de l'étape 5 dans celle-ci.
- Appelez UpdateLayeredWindow en utilisant la mémoire CC comme source.
- Sélectionnez le bitmap précédent et supprimez la mémoire DC.
- Détruire l'
HBITMAP
créé à l'étape 5.
Cette méthode devrait vous permettre de contrôler le canal alpha de tout ce qui est dessiné: transparent pour l'arrière-plan, opaque pour le texte et le bouton.
De plus, puisque vous allez être texte en sortie, je recommande que vous appelez SystemParametersInfo
pour obtenir le réglage par défaut anticrénelage (SPI_GETFONTSMOOTHING
), puis la SetTextRenderingHint
sur l'objet graphique pour définir le type d'anticrénelage au même type qui est configuré par l'utilisateur, pour un look plus agréable.
Désolé, il n'y a pas de fonctionnalité PM sur stackoverflow - donc je dois faire un commentaire ici - partageriez-vous le code pour la solution finale - similaire à ce que Koro a indiqué? Merci – Steve