IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PureBasic Discussion :

Un peu d'API windows


Sujet :

PureBasic

  1. #1
    Responsable Purebasic

    Avatar de comtois
    Inscrit en
    Avril 2003
    Messages
    1 280
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 1 280
    Points : 10 728
    Points
    10 728
    Billets dans le blog
    8
    Par défaut Un peu d'API windows
    En cherchant je ne sais plus quoi , je suis tombé là dessus, du coup j'ai testé par curiosité, et pour tester j'avais ajouté un peu de couleur, et voici le résultat. Par contre , je ne maitrise pas assez l'API pour garantir que ce code respecte bien toutes les règles de programmation ! notamment les DeleteObject_()

    Donc avant de le proposer pour la FAQ, j'aurais besoin d'un coup de pouce pour le commenter, voire le compléter si nécessaire (détruire correctement ce qui doit l'être).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    ;http://msdn2.microsoft.com/en-us/library/ms534890(VS.85).aspx
     
    Procedure WinCallback(hWnd, uMsg, wParam, lParam) 
        ; Windows fills the parameter automatically, which we will use in the callback...
        Define.PAINTSTRUCT ps
        Define.RECT rc
     
        If uMsg=#WM_PAINT
     
           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) 
     
           If (RectVisible_(hWnd, @rc)) 
               Polyline_(hdc, ?Triangle, 4) 
           EndIf
     
           SetViewportOrgEx_(hdc, 100, 0, NULL) 
           If (RectVisible_(hdc, @rc)) 
               Polyline_(hdc, ?Rectangle, 5); 
           EndIf
           SelectObject_(hdc, hpenb) 
           SetViewportOrgEx_(hdc, 0, 100, NULL) 
           If (RectVisible_(hdc, @rc)) 
               Polyline_(hdc, ?pentagon, 6); 
           EndIf
     
           SetViewportOrgEx_(hdc, 100, 100, NULL) 
           If (RectVisible_(hdc, @rc)) 
               Polyline_(hdc, ?Hexagon, 7) 
           EndIf
     
           DeleteObject_(hpen)
     
          EndPaint_(hwnd, @ps) 
     
        EndIf 
     
        ProcedureReturn #PB_ProcessPureBasicEvents 
      EndProcedure 
     
     
      If OpenWindow(0, 0, 0, 200, 200, "Messages", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget) 
     
        SetWindowCallback(@WinCallback())    ; active la callback
     
        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

  2. #2
    Membre averti
    Avatar de CORBASE
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 246
    Points : 431
    Points
    431
    Par défaut
    Voilà, j'ai commenté un zeste et rajouté une ligne de destruction de pen oublié par mégarde.

    Si je la retrouve, j'ai fais une source qui utilise le même principe et qui dessine sur une fenêtre avec diverse animations. De plus j'utilise ensuite les gadget PB pour faire le reste de mon design. J'essaye de fouiller dans toutes mes sources.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Réponses: 29
    Dernier message: 14/01/2013, 10h40
  2. tutoriel : La programmation de l'API Windows en C++ par Bob
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 19
    Dernier message: 21/06/2008, 14h34
  3. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  4. [API Windows] Polices de caractères disponibles
    Par bebeours dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/11/2003, 08h28
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo