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 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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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.
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.