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

MFC Discussion :

Récupérer 1 image insérée ds 1 contrôle "Picture"


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Par défaut Récupérer 1 image insérée ds 1 contrôle "Picture"
    Salut tt le monde,

    Comment récupérer l'image contenue dans le contrôle "Picture" ds 1 FormV ? J'essaye la méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CStatic* ControleQuiContientImage (CStatic*) GetDlgItem(ControleID);
    Mais ça ne marche pas.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Salut

    Apparemment tu peux tester le type d'image
    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
    DWORD st = ((CStatic *)GetDlgItem(IDC_STATIC))->GetStyle();
    if ((st & SS_ICON)    == SS_ICON   )
    {
      AfxMessageBox("SS_ICON");
      HICON icon = ((CStatic *)GetDlgItem(IDC_STATIC))->GetIcon();
      ......................
    }
    else
    if  ((st & SS_BITMAP) == SS_BITMAP)
    {
      AfxMessageBox("SS_BITMAP");
      HBITMAP bitmap = ((CStatic *)GetDlgItem(IDC_STATIC))->GetBitmap();
      ............................................
    }
    else
    if  ((st & SS_ENHMETAFILE) == SS_ENHMETAFILE)
    {
      AfxMessageBox("SS_ENHMETAFILE");
      HENHMETAFILE mtf = ((CStatic *)GetDlgItem(IDC_STATIC))->GetEnhMetaFile( );
      ............................................
    }
    else
      AfxMessageBox("pas une image");
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Par défaut
    Merci !

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Si celà te convient, pense au tag [Resolu] en bas à gauche de l'écran je crois.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Par défaut
    J'ai 1 petit pb. L'appel de la méthode GetDlgItem() me renvoie 1 pointeur nul. Pourtant, j'ai bien vérifié l'existence du contrôle CStatic.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CStatic* wndImageHolder = (CStatic *) GetDlgItem(IDC_STATIC);
    En principe, le contrôle d'ID IDC_STATIC appartient bien à ma FormView, donc il semble que l'application ne le trouve pas.

    :

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Par défaut
    L'id IDC_STATIC n'identifie pas forcement ton control.
    Alors conseil: change l'id de ton control static de manière à lui donner quelque chose de plus expressif (particulier)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Par défaut
    J'ai associé dans l'éditeur de ressources la valeur numérique IDC_IMAGE_CONTAINER à mon contrôle statique, mais la fonction GetDlgItem me renvoie toujours 1 pointeur nul.

    J'ai pensé à surcharger la fonction DoDataExchange(), mais je ne trouve pas 1 DDX_Image.

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Peux-tu poster le code complet de la fonction où tu fais ce test, as-tu plusieurs boîtes de dialogues dans ton projet ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Par défaut
    En gros, j'ai créé 1 projet MFC avec AppWizard. Dans ma FormView, j'ajoute 1 image, c'est tout. Dans la méthode OnCreate(), j'essaye de récupérer 1 pointeur sur l'image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int CEssaiView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
       if (CFormView::OnCreate(lpCreateStruct) == -1) return -1;
     
      // TODO: Add your specialized creation code here 
     
      // Je récupère le contrôle statique :
      CStatic* wndImageHolder = 
          (CStatic *) GetDlgItem  (IDC_IMAGE_CONTAINER);
     
      return 0;
    }

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    C'est peut-être un peu tôt dans le OnCreate, tu ne peux pas essayer "plus tard" ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Par défaut
    Citation Envoyé par Trap D
    C'est peut-être un peu tôt dans le OnCreate, tu ne peux pas essayer "plus tard" ?
    Je vois ce que tu veux dire. J'ai essayé dans la fonction OnInitialUpdate() : j'obtient 1 pointeur non NULL , mais par contre je n'arrive pas à récupérer l'image .

    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
     
    CStatic* wndImageHolder = 
      (CStatic *) GetDlgItem(IDC_IMAGE_CONTAINER);
    if (NULL == wndImageHolder) return true;
     
    // Jusqu'ici tout (semble aller) va bien
     
    DWORD st = wndImageHolder->GetStyle();
    if  ((st & SS_BITMAP) != SS_BITMAP) return true;
    HBITMAP hBitmap = wndImageHolder->GetBitmap();       
    LPBITMAP lpBitmap = (LPBITMAP) hBitmap;    
    m_bitmapImage.CreateBitmapIndirect(lpBitmap);
    BITMAP pBitMap;
    m_bitmapImage.GetBitmap(&pBitMap);
    // J'obtient 1 taille nulle (0,0), donc pb 
    m_sizeImage.cx = pBitMap.bmWidth;
    m_sizeImage.cy = pBitMap.bmHeight;
    CFormView::SetScrollSizes(MM_TEXT, m_sizeImage);

  12. #12
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    J'ai fait le test (de mon bout de programme) avec un "DialogBased" programme, et ça fonctionne bien dans le OnInitDialog().

    [edit]
    Tu es sûr de ces lignes de code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HBITMAP hBitmap = wndImageHolder->GetBitmap();       
    LPBITMAP lpBitmap = (LPBITMAP) hBitmap;   
    m_bitmapImage.CreateBitmapIndirect(lpBitmap);
    BITMAP pBitMap;
    m_bitmapImage.GetBitmap(&pBitMap);
    [/edit]
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Par défaut
    Citation Envoyé par Trap D
    J'ai fait le test (de mon bout de programme) avec un "DialogBased" programme, et ça fonctionne bien dans le OnInitDialog().

    [edit]
    Tu es sûr de ces lignes de code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HBITMAP hBitmap = wndImageHolder->GetBitmap();       
    LPBITMAP lpBitmap = (LPBITMAP) hBitmap;   
    m_bitmapImage.CreateBitmapIndirect(lpBitmap);
    BITMAP pBitMap;
    m_bitmapImage.GetBitmap(&pBitMap);
    [/edit]
    Oui. Je vais essayer avec 1 Dialog. J'ai utilisé la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HBITMAP CStatic::GetBitmap( ) const;
    Ensuite, j'essaye d'initialiser 1 objet CBitmap à partir du handle obtenu. Mais l'initialisation plante.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Par défaut
    Pareil avec 1 CDialog, ça plante aussi. Je me demande où peut être le pb.

  15. #15
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Je pense que ça vient de ta conversion LPBITMAP lpBitmap = (LPBITMAP) hBitmap;
    Fouille de ce côté là, moi je ne connais pas bien.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Par défaut
    Je crois que j'ai trouvé.

    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
     
    void CEssaiView::OnInitialUpdate() {
     
    /*...*/
     
    // Donc là, je récupère 1 handle de l'image contenue ds le contrôle 
    // statique :
    HBITMAP hBitmap = wndImageHolder->GetBitmap();       
     
    // Je récupère 1 pointeur sur 1 objet de type CBitmap à l'aide de la 
    // méthode FromHandle() :
    CBitmap bitmap;
    CBitmap *pbitmap = bitmap.FromHandle(hBitmap);
     
    // Je récupère 1 structure BITMAP à partir du pointeur obtenu 
    // précédemment :
    BITMAP BitMap;	
    pbitmap->GetBitmap(&BitMap);
     
    m_sizeImage.cx = BitMap.bmWidth;
    m_sizeImage.cy = BitMap.bmHeight;
     
    // A partir de la structure obtenue, j'initialise mon objet CBitmap :
    m_bitmapImage.CreateBitmapIndirect(&BitMap);
     
    /*...*/
    }
    C'est 1 peu compliqué, mais bon ça marche...

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Par défaut
    Citation Envoyé par Trap D
    Je pense que ça vient de ta conversion LPBITMAP lpBitmap = (LPBITMAP) hBitmap;
    Fouille de ce côté là, moi je ne connais pas bien.
    Tu as raison, cette conversion est foireuse.

  18. #18
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    J'étais sur la même piste mais tu as été plus vite
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 28
    Par défaut
    Citation Envoyé par Trap D
    J'étais sur la même piste mais tu as été plus vite

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

Discussions similaires

  1. [auto-incrémentation] récupérer la valeur insérée
    Par laffreuxthomas dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 16/01/2005, 15h53
  2. [Swing] récupérer une image d'un composant
    Par klemouf dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 16/09/2004, 10h24

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