Chargement image dans un contrôle "static".

Signaler
Messages postés
68
Date d'inscription
vendredi 23 novembre 2007
Statut
Membre
Dernière intervention
14 mars 2012
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Bonsoir.

Je travaille avec les APIs Windows et j'ai besoin de charger plusieur images dans une fenêtre, j'ai trouver le moyen de le faire avec les controles "static". Cependant l'image ne se charge pas elle ne s'affiche pas.

    Comment dois-je m'y prendre pour afficher cette image, où bien y aurait-il une autre solution plus intéressante ?

Merci pour votre aide.

8 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Tu utilises bien STM_SETIMAGE ou STM_SETICON? Es-tu sûr de passer un handle d'image valide?

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
68
Date d'inscription
vendredi 23 novembre 2007
Statut
Membre
Dernière intervention
14 mars 2012

Bonsoir.

Je procède ainsi :

        HWND hstatic = CreateWindow(
        "STATIC",
        0,
        WS_CHILD|WS_VISIBLE|SS_BITMAP,
        10,10,
        100,60,
        hwnd,
        0,
        0,
        NULL);

        HANDLE hImage = LoadImage(NULL,(LPCTSTR)"img.bmp",IMAGE_BITMAP,50,50,LR_SHARED);
        SendMessage(hstatic,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hImage);
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Ca m'a pas l'air mal... Tu as vérifié que hImage est OK?

Petite remarque : (LPCTSTR)"img.bmp" -> Tu devrais éviter ce genre d'écriture (le cast est inutile, et si jamais tu passes en unicode, ca compilera et ca fera une erreur à l'exécution)

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

HANDLE hImage = LoadImage(NULL,(LPCTSTR)"img.bmp",IMAGE_BITMAP,50,50,LR_SHARED);


Avec cette instruction, img.bmp est un bitmap en ressource (il n'y a pas LR_LOADFROMFILE) !
Est-ce bien le cas ? car ce nom fait plutôt penser à un fichier !

Jean-François
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
20
Salut,
Si c'est bien un nom de fichier que tu donnes et pas une ressource il faut mettre  le flag : LR_LOADFROMFILE

Tu peux aussi utiliser le static ownerdraw en gérant le msg WM_DRAWITEM :

hWndStatic = CreateWindow("STATIC", "staticControl",
            WS_CHILD | WS_VISIBLE | SS_OWNERDRAW ,
            ect...

// le msg dans wndProc
 case WM_DRAWITEM:
     lpdis = (LPDRAWITEMSTRUCT)lParam;
     // on dessine ce qu'on veut avec le hdc 
     //  lpdi->hDC;
     // pour une image : SelectObject() et BitBlt()
     return TRUE;
Messages postés
68
Date d'inscription
vendredi 23 novembre 2007
Statut
Membre
Dernière intervention
14 mars 2012

Oui parce que c'est un fichier. Il faudrait donc que je remplace LR_SHARED par LR_LOADFROMFILE ?
Messages postés
68
Date d'inscription
vendredi 23 novembre 2007
Statut
Membre
Dernière intervention
14 mars 2012

Effectivement, sa marche nickel comme cela. Merci pour ton aide, je m'en souviendrais maintenant.

A plus.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Tu peux garder les deux : LR_SHARED | LR_LOADFROMFILE

_____________________________________
Un éditeur de ressources gratuit pour Windows