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 �clair�
    Inscrit en
    Octobre 2005
    Messages
    259
    D�tails du profil
    Informations personnelles :
    �ge : 42

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    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
    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 �clair�
    Inscrit en
    Octobre 2005
    Messages
    259
    D�tails du profil
    Informations personnelles :
    �ge : 42

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    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 �clair�
    Inscrit en
    Octobre 2005
    Messages
    259
    D�tails du profil
    Informations personnelles :
    �ge : 42

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    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
    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 �clair�
    Inscrit en
    Octobre 2005
    Messages
    259
    D�tails du profil
    Informations personnelles :
    �ge : 42

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    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
    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 �clair�
    Inscrit en
    Octobre 2005
    Messages
    259
    D�tails du profil
    Informations personnelles :
    �ge : 42

    Informations forums :
    Inscription : Octobre 2005
    Messages : 259
    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
    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