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

Windows Discussion :

[API Windows] Créer un contrôle image


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut [API Windows] Créer un contrôle image
    Bonjour,

    Qqun sait il comment faire pour créer un contrôle image avec l'API ?
    C'est à dire un contrôle dans lequelle je peux mettre une image sans devoir la redessiner ni rien ...
    C'était faisable en Visual Basic donc je suppose que cela l'est aussi en C++.

    Merci

    Zazeglu

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 946
    Points : 59 446
    Points
    59 446
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Je ne connais pas le C++ mais je programme en POO Pascal; donc, ça ne doit pas être très différent.

    Il faut créer un bouton avec le style ws_OwnerDraw puis une méthode répondant au message wm_DrawItem qui affiche la bitmap.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 71
    Points : 78
    Points
    78
    Par défaut
    tu crée un contrôle de classe STATIC, puis tu utilises le message STM_SETIMAGE (cf. msdn pour la description du message).

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    Excuse moi bleyblue mais tu entend quoi par contrôle de classe statique ?

    Je doit déclarer le handle vers le contrôle en statique c'est ça ?

    Sinon je ne trouve aucune référence à ws_OwnerDraw dans MSDN Alcatiz

    Merci

    Zazeglu

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 71
    Points : 78
    Points
    78
    Par défaut
    contrôle de classe STATIC: CreateWindow("STATIC", ...)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    ahhh ,donc c'est carrément un nouveau type de contrôle
    Bon merci je vais rechercher des infos la dessus sur MSDN

    Zazeglu

  7. #7
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 946
    Points : 59 446
    Points
    59 446
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Zazeglu
    Sinon je ne trouve aucune référence à ws_OwnerDraw dans MSDN Alcatiz
    Beuuuh c'était bs_OwnerDraw. Je suis désolé

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    Beuuuh c'était bs_OwnerDraw. Je suis désolé
    Pas grave ,c'est bien bs_ownerdraw

    Merci !

    Zazeglu

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    Ah mais maintenat que le contrôle est créer ,comment faire pour y inclure l'image ?
    Il faut utiliser la fonction LoadBitmap ?

    Merci

    Zazeglu

  10. #10
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 946
    Points : 59 446
    Points
    59 446
    Billets dans le blog
    2
    Par défaut
    Si ton image fait bien partie des ressources de ton programme : oui.

    Ensuite, le truc est de créer un contexte d'affichage virtuel (à l'aide de CreateCompatibleDC), d'y sélectionner la bitmap (SelectObject) puis de transférer celle-ci dans le contexte d'affichage de ton contrôle (à l'aide de BitBlt ou StretchBlt).

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    ouhhh punaise ,je me demande comment je vais faire ça moi ,bon je vais essayer

    Merci beaucoup

    Zazeglu

  12. #12
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 946
    Points : 59 446
    Points
    59 446
    Billets dans le blog
    2
    Par défaut
    Un petit exemple en Pascal (assez compréhensible je pense) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Procedure tBoutonPerso.WMDRAWITEM (var Msg : tMessage);
    Var DC, DCVirtuel : hDC;
        BMP, AncienneBMP : hBitmap;
    Begin
      DC:=GetDC(hWindow);
      DCVirtuel:=CreateCompatibleDC(DC);
      BMP:=LoadBitmap(hInstance,pChar(id_Bitmap));
      AncienneBMP:=SelectObject(DCVirtuel,BMP);
      BitBlt(DC,5,5,32,32,DCVirtuel,0,0,srcCopy);
      SelectObject(DCVirtuel,AncienneBMP);
      DeleteDC(DCVirtuel);
      ReleaseDC(hWindow,DC);
    End;

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    ah ,je suis désolé d'être aussi embetant mais ,donc dans la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    BitBlt(DC,5,5,32,32,DCVirtuel,0,0,srcCopy);
    Ce sont les coordonnées du contrôle image que tu passe ?
    Et aussi il y a un pb ,car je dans la fonction de rappel pour géré les événements ; je ne possède pas d'instance vers la fenêtre (hInstance) ; je ne l'ai que dans la procédure principale

    J'ai essayer de la récupérer dans la procédure principale et de l'enregistrer dans une variable externe ; mais je n'ai qu'un carré noir qui apparait à l'écran ; voilà le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DC = GetDC(hwnd);
                    DCVirtuel = CreateCompatibleDC(DC);
                    BMP = LoadBitmap(hHIS,"BMP2");
                    AncienneBMP = SelectObject(DCVirtuel,BMP);
    
                    BitBlt(DC,285,100,80,30,DCVirtuel,0,0,1);
                    SelectObject(DCVirtuel,AncienneBMP);
                    DeleteDC(DCVirtuel);
                    ReleaseDC(hwnd,DC);

    hHIS est la variable externe que j'ai créer avec l'instace donc

    Merci

    Zazeglu

  14. #14
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 946
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 946
    Points : 59 446
    Points
    59 446
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Zazeglu
    Ce sont les coordonnées du contrôle image que tu passe ?
    BitBlt transfère en réalité un rectangle d'un contexte d'affichage vers un autre. Les paramètres sont les suivants, dans l'ordre :

    - Le contexte d'affichage destination (celui de ton contrôle);
    - L'abscisse et l'ordonnée du rectangle de destination;
    - La largeur et la hauteur du rectangle de detination;
    - Le contexte d'affichage source (le virtuel);
    - L'abscisse et l'ordonnée du rectangle source;
    - L'opération binaire à faire subir aux bits du rectangle source. Divers effets sont possibles et j'ai quelques doutes quant-à la valeur 1 que tu utilises : ton rectangle noir vient peut-être de là.

    Voici la valeur correspondant à la copie simple du rectangle source :
    SRCCOPY 0x00CC0020L
    Copies the source bitmap to the destination bitmap.
    Quant au handle d'instance, il s'agit de l'instance actuelle de ton programme. Ce handle est nécessaire au chargement de n'importe quelle ressource.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    - L'opération binaire à faire subir aux bits du rectangle source. Divers effets sont possibles et j'ai quelques doutes quant-à la valeur 1 que tu utilises : ton rectangle noir vient peut-être de là. 
    
    Voici la valeur correspondant à la copie simple du rectangle source : 
    Citation: 
    SRCCOPY 0x00CC0020L 
    Copies the source bitmap to the destination bitmap.
    Oui c'est bien ça qui clochait !

    Merci beaucoup !

    Zazeglu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. API pour créer un shortcut windows
    Par dummygreg dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 22/07/2009, 11h21
  2. API Windows pour manipulation d'images avec transparence
    Par Grosbenji dans le forum Windows
    Réponses: 2
    Dernier message: 28/08/2007, 11h51
  3. Créer Thread avec nouvelle console ? API Windows ?
    Par TimerMan dans le forum Windows
    Réponses: 4
    Dernier message: 26/11/2006, 23h27
  4. Réponses: 4
    Dernier message: 26/01/2006, 10h48
  5. Réponses: 3
    Dernier message: 09/11/2004, 10h44

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