cs_NoFutur
Messages postés171Date d'inscriptionmardi 17 décembre 2002StatutMembreDernière intervention 6 mai 2007
-
26 nov. 2005 à 11:35
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 2009
-
27 nov. 2005 à 22:21
Tout est dans le titre :
Si vous connaissez un code sympathique permettant de skinner le contour intérieur d'une fenêtre mère MDI je suis preneur.
J'ai déjà tout ce qu'il me faut pour pouvoir skinner des fenêtre filles, je bloque un peu beaucoup sur les fenêtres mères qui ne se laissent pas manipuler aussi bien que leurs filles (l'instinct maternel peut-être).
La finalité serait de pouvoir donner l'illusion qu'il n'y a qu'une seule fenêtre skinner le reste étant appeler sans utiliser les bordures classiques des fenêtres.
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 26 nov. 2005 à 13:57
J'ai une solution à te proposer,
C'est surement pas la meilleur... mais bon....
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As
Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long,
ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Dim e As Long, MeDC As Long
Private Sub MDIForm_Load()
e = CreateRectRgn(5, 26, 200, 200) 'Créer un rectangle sans les bordures du form
SetWindowRgn Me.hwnd, e, True 'Rogner le form en dehors de ce rectangle
MeDC = GetDC(Me.hwnd) ' Juste pour récupérer le DC du form
Me.Picture = LoadPicture("c:\temp.bmp") 'Et tu applique ton skin
End Sub
Je t'ai aussi mis "CreateEllipticRgn" pour faire des form en forme d'éllipse...
Ainsi tu as le DC du form pour pouvoir dessiner dessus.
Evidemment le "skin" (c:\temp.bmp) est un peu simplet, je te conseil de
créer le skin avec les bonnes tailles de bordures etc.. dans une
picture box invisible, de l'enregistrer et puis de la charger. Ou plus
simple d'utiliser stretchblt avec le DC récupéré...
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 27 nov. 2005 à 22:21
Gasp, je n'ai point de solutions pour la scrollbar...
Pour ce qui est de mon code, il faut utiliser les coordonnées relatives à la région utilisée,
Par exemple en reprennant ce que j'ai fait plus haut, le rectangle est (5,26,200,200)
Il faudra donc ajouter 5 à tes X et 26 à tes Y.
SetWindowRgn ne fait que masquer ce qui est en-dehors du rectangle...
cs_NoFutur
Messages postés171Date d'inscriptionmardi 17 décembre 2002StatutMembreDernière intervention 6 mai 20071 27 nov. 2005 à 20:48
Je reviens sur le devant de la scène pour un autre problème. En fouinant un peu j'ai trouvé ceci qui enlève bien les bordures de la fenêtre :
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, ByValdwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000
Private Const WS_SYSMENU = &H80000
Private Sub MDIForm_Load()
Dim lStyle As Long
lStyle = GetWindowLong(Me.hwnd, GWL_STYLE)
lStyle = lStyle Xor WS_CAPTION
Call SetWindowLong(Me.hwnd, GWL_STYLE, lStyle)
End Sub
Le seul problème c'est qu'il me met une barre de défilement juste en bas de la fenêtre MDI mère, si tu as une solution potentielle à ce cas là je suis preneur.
Ton code est nikel jusqu'à ce que je teste avec les skins de XP actif, je me suis aperçu que les paramètres ne collaient plus avec la taille de la fenêtre.