OVH Cloud OVH Cloud

Afficher les controles en mode transparent

1 réponse
Avatar
Jean Saint Jalmes
Bonjour,

Sous VB6.0 je dessine le fond d'une fenêtre avec un dégradé de couleur et je
souhaite que les controles Frame et/ou CheckBox laissent apparaître ce
dégradé.

La méthode suivante marche très bien avec la fenêtre principale (la couleur
de fond devient transparente) mais ne marche pas avec les controles ?

Private Const LWA_COLORKEY = &H1
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_LAYERED = &H80000

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA"
(ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd
As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As
Long

Private sub Form_Load
Set_Transparent Me.hwnd,Me.BackColor ' Marche bien
Set_Transparent Frame1.hwnd,Frame1.BackColor ' Ne marche pas
End Sub

Private sub Set_Transparent(ByVal hWnd As Long,byval COLOR as long)

Dim Ret As Long

Ret = GetWindowLong(hWnd, GWL_EXSTYLE)
Ret = Ret Or WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, Ret
SetLayeredWindowAttributes hWnd, COLOR, 0, LWA_COLORKEY
End sub

Y à t'il une méthode pour obtenir ce que je souhaite ?
Je ne trouve aucune information sur l'API SetLayeredWindowAttributs dans la
base de connaissances Windows.

Merci d'avance.

Jean

1 réponse

Avatar
jmn
Il est nécessaire d'utiliser UpdateLayeredWindow qui, à la différence de la
méthode que vous utilisez et qui s'applique directement sur la fenêtre,
réclame la génération d'une Layered Window distincte.

L'exemple donné dans le lien (que j'ai trouvé grace à Copernic...) traite le
problème en totalité, mais vous allez voir que cela amène à prendre en
charge des opérations habituellement implicites sous VB.



http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeIdB918&ln
gWId=1

JMN