Deux API incompatible (SetParent & SetLayeredWindowAttributes, GetWindowsLong me

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 5 févr. 2009 à 17:36
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 6 févr. 2009 à 10:22
Bonjour,

J'utilise depuis quelque temps déjà l'API SetParent pour intégrer des forms dans des contrôles (en générale des picture box). Mais cette fois je voudrais en plus rendre le font de ma form transparente donc je pensais faire un 'truc' du genre :

Dim Attrib As Long
Dim CouleurTransparente As Long
   CouleurTransparente = Me.BackColor 'Le font est en Orange fluo
   SetParent Me.hwnd, Parent.hwnd
   Attrib = GetWindowLong(Me.hwnd, -20)
   SetWindowLong Me.hwnd, -20, Attrib Or &H80000
   SetLayeredWindowAttributes(Me.hwnd, CouleurTransparente, 0, 1)

Problème dans ce cas la fonction GetWindowsLong me retourne 0

Donc du coup je me suis dit que j'allais faire le SetParent avant la transparence

Dim Attrib As Long

Dim CouleurTransparente As Long

   CouleurTransparente = Me.BackColor 'Le font est en Orange fluo
   SetParent Me.hwnd, Parent.hwnd
   Attrib = GetWindowLong(Me.hwnd, -20) '(GWL_STYLE soit -16 me retourne une valeur mais la transparence n'est pas appliqué par le SetLayeredWindowAttributes dans ce cas )
   SetWindowLong Me.hwnd, -20, Attrib Or &H80000

   SetLayeredWindowAttributes(Me.hwnd, CouleurTransparente, 0, 1)

Dans ce cas la form enfant ne bouge plus avec le parent et des problèmes de position de la souris se pose si le coins en haut à gauche de l'objet parent n'est pas en 0,0 (ce qui n'est pour ainci dire jamais le cas)

Auriez vous une idée pour faire sa ?

PS:
Problème de position facilement identifiable grace à ce metit bout de code :
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Debug.Print "X:" & X & "|" & "Y:" & Y
End Sub

HELP j'avoue que là je suis complètement coincé

 Amicalement <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-pa

6 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
5 févr. 2009 à 21:05
les fenetre translucides ne peuvent pas avoir de Parent
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
5 févr. 2009 à 21:08
la doc est claire, là dessus "Note that WS_EX_LAYERED cannot be used for child windows."

http://msdn.microsoft.com/en-us/library/ms632599(VS.85).aspx#layered
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
5 févr. 2009 à 20:36
Salut
Attention à ne pas utiliser des noms de variables/objets (comme Parent) qui pourraient ressembler à des instrcutions !
Pour les paramètres des APIs, utilise plutôt les constantes nommées qui vont bien. Elles sont plus simple à comprendre à la relecture ou ... dans un forum
Deux outils indispensables :
- "API-Guide" pour les définitions et exemples
- "APIViewer" pour retrouver les structures et constantes (et leurs valeurs)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
6 févr. 2009 à 08:55
jack :

Oui j'utilise en générale des constantes j'ai posté un peut vite hier (copier, coller, test, re-test, ..., re-...-re-test, post ici, rentré maison ).
Pour les variable en générale j'utilise plutôt des nom comme FormChild (ou PictureParent). Jamais hue de problèmes de compréhension jusqu'à maintenant (bien que Parent tout seul peut prêter à confusion je suis d'accord)

Renfield :
Merci de l'info je n'avais même pas relevé ce détail (qui n'en est pas vraiment un en plus )
MERCI j'ai l'imprécision que c'est grasse à toi que je résout tout mes "petit soucis"
     Renfield président, Renfield président, ...

 Amicalement <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-pa
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
6 févr. 2009 à 10:17
NB : Pour ce qui est des noms de variables ressemblant à des instructions : Ce n'est pas que cela perturbe la lecture, mais le compilateur n'aimera pas, il risque de perdre les pédales
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
6 févr. 2009 à 10:22
Carrément
Bà ok... Merci de l'info

 Amicalement <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-pa
0