Appliquer un skin dans une fenêtre mère MDI

Résolu
cs_NoFutur
Messages postés
171
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007
- 26 nov. 2005 à 11:35
Julien237
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Derniè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.

Merci d'avance

4 réponses

Julien237
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
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é...



Julien.
3
Julien237
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
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...

Julien.
3
cs_NoFutur
Messages postés
171
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007

27 nov. 2005 à 13:46
C'est excellent pour un bon début merci
0
cs_NoFutur
Messages postés
171
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
6 mai 2007

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.
0