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 :

Boite dialogue + Affichage d'un bitmap


Sujet :

MFC

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    259
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    Points : 126
    Points
    126
    Par défaut Boite dialogue + Affichage d'un bitmap
    Bonjour, je travail avec evc4.00. J'aimerais créé une boite de dialogue d'ouverture de fichier et afficher l'image sélectionnée.

    Voici la déclaration de mes variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int *buf3;
    CDC hdcTemp;
    HBITMAP hbm;
    CBitmap bm;
    Et voici la méthode de réponse d'un élément du menu (dans laquelle je fais mon traitement):
    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
    void CChildView::OnFileOpen()
    {
    	// Contexte de périphérique
    	CPaintDC dc(this);
    	CClientDC dcd(this);
     
    	// Pointeur sur la fenêtre principale
    	CMainFrame * pMainframe = (CMainFrame *) AfxGetApp()
                                                                                ->m_pMainWnd;
     
    	OPENFILENAME ofn;
     
    	CFile image;
     
    	int Taille;
     
    	TCHAR   szFile[MAX_PATH] = TEXT("\0");
    	memset( &(ofn), 0, sizeof(ofn));
    	ofn.lStructSize   = sizeof(ofn);
    	ofn.lpstrFile = szFile;
    	ofn.nMaxFile = MAX_PATH;
     
    	ofn.lpstrFilter = TEXT("All (*.*)\0*.*\0");   
    	ofn.lpstrTitle = TEXT("Open File");
    	ofn.Flags = OFN_EXPLORER;
     
    	if (GetOpenFileName(&ofn))
    	{
    		MessageBox(ofn.lpstrFile, TEXT("Info"), MB_OK);
     
    		image.Open(ofn.lpstrFile, CFile::modeRead);
     
    		Taille = image.Read(buf3, 500);
    		image.Close();
     
    		// Création d'un bitmap avec le buffer
    		hbm = CreateBitmap(120,120,1,24,buf3);
    		hdcTemp.CreateCompatibleDC(&dcd);
     
    		hdcTemp.SelectObject(hbm);
    		GetObject(hbm, sizeof(BITMAP), &bm);
     
    		dcd.BitBlt(0, 0, 50, 50, &hdcTemp, 0, 0, SRCCOPY);
    	}
     
    	//Supprime le contexte mémoire
    	hdcTemp.DeleteDC();
     
    	//Supprime l'objet créé
    	DeleteObject(hbm);
    }
    Le problème c'est que l'image sélectionnée dans la boite de dialogue ne s'affiche pas sur l'écran de mon pocket pc.

    Qqun a-t-il une idée de l'erreur que j'ai faite?

    Merci pour vos réponses

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    tu utilises deux dc et tu ignores celui du paint ..
    commence par enlever CClientDC dcd(this); et utilise CPaintDC dc(this); a la place.



  3. #3
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    259
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    Points : 126
    Points
    126
    Par défaut
    J'ai fait ce que tu m'as dis mais ca ne marche toujours pas, et la boite d'ouverture de fichier reste affichée.

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    259
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    Points : 126
    Points
    126
    Par défaut
    Il n'y aurais pas un probleme avec la fenetre principale?
    Peut etre que l'image ne s'affiche pas parce qu'elle ne connait pas la fenetre principale?

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    bon j'avais pas bien lu ton code,
    ce n'est pas la bonne methode d'affichage .
    il te faut un objet qui affiche le bitmap.
    sinon lors du premier raffraichissement de fenetre ton dessin sera effacé.
    il faut toujours placer une logique de dessin dans la fonction paint ,ondraw ,ondrawitem etc ... d'un objet fenetre (suivant le controle).
    en l'occurence ici il te faut un controle comme un bouton par exemple qui affichage dans sa zone client le bitmap selectionné .
    voir faq:
    http://c.developpez.com/faq/vc/?page...awBitmapInCtrl
    note dans la faq j'utilse la classe CPicture tu n'es pas obligé tu continuer de faire le traitement avec BitBlt.


  6. #6
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    259
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    Points : 126
    Points
    126
    Par défaut
    Re,
    j'ai regardé le lien que tu m'a donné, je dois avoué ke je ne comprend pas trop, perso j'aimerais ne pas devoir créer une nouvelle classe.

    De plus si j'ai bien compris l'image sera affichée dans une boite de dialogue et moi je veux qu'elle s'affiche dans ma fenetre principale....

    Je ne sais pas si tu vois ce je veux dire

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    dans la MainFrame ?
    si c'est le cas la logique de dessin est a mettre de le message WM_ERASEBKGND .


  8. #8
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    259
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    Points : 126
    Points
    126
    Par défaut
    Oui elle doir s'afficher dans la mainFrame....

    Donc d'apres toi dans ma fonction OnFileOpen() ,après que j'ai fait le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(GetOpenFileName(&ofn))
    je dois appeler WM_ERASEBKGND ?

    Je suis desolé mais je ne comprend pas très bien....

  9. #9
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Windows est événementiel .
    Donc ton traitement doit l'être aussi .
    dans un message de commande de menu tu sélectionnes une image que tu charges dans un objet (Bitmap).
    Ensuite tu provoques un repaint de la fenêtre avec Invalidate().
    dans la fonction OnEraseBkng tu affiches le bitmap uniquement si il est valide
    C’est a dire si la donnée m_hObject est différente de null .
    À chaque changement de bitmap il faudra libérer le précèdent et re provoquer un affichage.
    la logique étant ainsi repartie par traitement : la sélection et le dessin ,chacun dans messages différents .


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

Discussions similaires

  1. Affichage de la boite dialogue 'Impression'
    Par tamina dans le forum Débuter
    Réponses: 0
    Dernier message: 24/02/2012, 11h38
  2. problème affichage des boite dialogue
    Par kos.noura dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 18/11/2008, 14h17
  3. Réponses: 10
    Dernier message: 21/04/2005, 10h00
  4. [MFC] Impression d'une boite dialogue
    Par mick74 dans le forum MFC
    Réponses: 5
    Dernier message: 03/06/2004, 10h02
  5. Affichage d'une bitmap et de l'heure
    Par nanarr dans le forum Assembleur
    Réponses: 14
    Dernier message: 16/04/2004, 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