1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
;http://msdn2.microsoft.com/en-us/library/ms534890(VS.85).aspx
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
; Windows renseigne les paramètres automatiquement, et nous allons les utiliser dans notre procédure
Define.PAINTSTRUCT ps
Define.RECT rc
; Message WM_PAINT, autrement dit lorsque que l'on dessine (fenêtre, autres ..)
If uMsg=#WM_PAINT
; On attaque à paindre sur notre fenêtre et on récupère le handle
hdc = BeginPaint_(hwnd, @ps)
SetRect_(@rc, 0, 0, 100, 100);
hpen=CreatePen_(#PS_SOLID, 4, #Red)
hpenb=CreatePen_(#PS_SOLID, 4, #Blue)
SelectObject_(hdc, hpen)
; on trace notre triangle (défini dans notre structure) en Rouge
If (RectVisible_(hWnd, @rc))
Polyline_(hdc, ?Triangle, 4)
EndIf
; on change les coordonnée de référence et on trace un carré en rouge
SetViewportOrgEx_(hdc, 100, 0, NULL)
If (RectVisible_(hdc, @rc))
Polyline_(hdc, ?Rectangle, 5);
EndIf
; on change le stylo, on passe en bleu et on dessine un pentagone
; en se rebasant sur un autre référentiel de coordonées
SelectObject_(hdc, hpenb)
SetViewportOrgEx_(hdc, 0, 100, NULL)
If (RectVisible_(hdc, @rc))
Polyline_(hdc, ?pentagon, 6);
EndIf
; on rechange le référentiel et on dessine notre hexagone en bleu
SetViewportOrgEx_(hdc, 100, 100, NULL)
If (RectVisible_(hdc, @rc))
Polyline_(hdc, ?Hexagon, 7)
EndIf
; on libère les objets de brush
DeleteObject_(hpen)
DeleteObject_(hpen) ; <- tu avais oublié celui là
; On a fini notre dessin et on le spécifie à Win32
EndPaint_(hwnd, @ps)
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents ; on retourne l'event PureBasic
EndProcedure
If OpenWindow(0, 0, 0, 200, 200, "Messages", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget)
; Purebasic gère lui même les évènement Windows. Cependant il est tout à fait possible
; de gérer tout, ou une partie (comme ici) des message Win32.
SetWindowCallback(@WinCallback()) ; active la callback personnalisé
; Boucle classique PB qui attend la fermeture dee la fenêtre
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
DataSection
triangle:
Data.l 50,2, 98,86, 2,86, 50,2
rectangle:
Data.l 2,2, 98,2, 98,98, 2,98, 2,2
pentagon:
Data.l 50,2, 98,35, 79,90, 21,90, 2,35, 50,2
hexagon:
Data.l 50,2, 93,25, 93,75, 50,98, 7,75, 7,25, 50,2
EndDataSection |
Partager