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 :

Affichage d'un bitmap


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut Affichage d'un bitmap
    Bonjour,

    Dans mon application j'aimerais afficher une image bitmap que j'ai créée dans l'onglet RessourceView.
    J'ai crée mon image bitmap je l'ai déclaré avec classWizard dans l'onglet Member Variables puis j'ai donc réalisé mon programme pour afficher cette bitmap lorsque je le souhaite. Cette bitmap doit s'afficher lorsque je fais un double clic sur une ligne de ma Boite de dialogue principal puis une autre boite de dialogu s'affcihe avec différentes infos. Mais qd maintenant je clic dessus j'ai l'erreur suivante (voir pièce jointe)

    Pouvez vs m'aider? J'ai peut-être oublier de faire une manipulation?
    Images attachées Images attachées

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 457
    Par défaut
    Est-ce que la ligne 301 de votre fichier "winocc.cpp" correspond au code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));
    dans la méthode "int CWnd::SetDlgCtrlID(int nID)" ?

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    Est-ce que la ligne 301 de votre fichier "winocc.cpp" correspond au code suivant :

    Code :
    ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));dans la méthode "int CWnd::SetDlgCtrlID(int nID)" ?
    Non voici ce qui correspond à la ligne 301 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BOOL CWnd::ShowWindow(int nCmdShow)
    {
    	ASSERT(::IsWindow(m_hWnd)); // ligne 301
     
    	if (m_pCtrlSite == NULL)
    		return ::ShowWindow(m_hWnd, nCmdShow);
    	else
    		return m_pCtrlSite->ShowWindow(nCmdShow);
    }

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 457
    Par défaut
    Vous n'utilisez donc pas VC2008 SP1.

    "m_hWnd" n'est donc pas un handle de fenêtre valide lord de l'appel à la méthode "ShowWindow". l'erreur se produit dans quel type de fenêtre ? (le type de this lors de l'erreur).

    Avec les soueces des MFC et la pile d'appel lord de l'erreur devraient vous donner la cause de l'erreur.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    Vous n'utilisez donc pas VC2008 SP1.
    j'utilise visual C++ 6.0

    "m_hWnd" n'est donc pas un handle de fenêtre valide lord de l'appel à la méthode "ShowWindow". l'erreur se produit dans quel type de fenêtre ? (le type de this lors de l'erreur).
    Pouvez vous être plus clair je ne comprend pas!!!!

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    Mon erreur est peut être la suivante, j'utilise une fonction boolean dans une fonction void?

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 457
    Par défaut
    Mon erreur est peut être la suivante, j'utilise une fonction boolean dans une fonction void?
    Là, c'est moi qui ne comprend rien. On peut appeler n'importe quel fonction depuis n'importe quelle autre, bu moment que l'on respecte la signature (les paramètres et la valeurs de retour) de la fonction appelé.



    Si "m_hWnd" ne vous dit rien, c'est que vous êtes assez novice au niveau MFC.

    Les MFC sont en C++, et créer une fenêtre : une instance d'une classe dérivé de CWnd, avec un new n'a de sens que dans la mémoire de votre programme mais pas au niveau du sous-système d'affichage de fenêtre de Windows (le GDI).
    Pour voir une image à l'écran, il faut qu'elle existe dans le GDI, qui a une API en C (incluse dans l'API Win32 de Windows).
    Quand une classe CWnd a besoin de communiquer avec le GDI pour, par exemple, changer son titre, cette classe utilise un handler, c'est le fameux "m_hWnd" qui correspond à l'identifiant de la fenêtre mais au niveaux du GDI. Cet handler est récupéré (généralement) lors de la demande de création de la fenêtre GDI correspondant l'objet CWnd des MFC.
    Cela se produit généralement lors de l'appel de la méthode "Create" de l'objet MFC. Grossièrement le "this" d'un objet CWnd des MFC correspond à un handle du GDI.
    Si votre "m_hWnd" n'est pas valide, c'est que, où la fenêtre n'a pas encore été créé au niveau GDI, soit qu'elle a déjà été détruite au niveau du GDI.
    l'erreur se produit dans quel type de fenêtre ? (le type de this lors de l'erreur).
    Bin, "this", il a quoi comme type?
    Le debugger de VC++ devrait automatiquement le donner.
    Sinon, la pile d'appel devrait vous l’indiquer indirectement.

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    oui je suis novice en visual c++!!!
    Le debugger de VC++ devrait automatiquement le donner.
    Sinon, la pile d'appel devrait vous l’indiquer indirectement.
    le debugger de me donne rien !!! comment l'utiliser?

    Le message d'erreur qui apparait arrive lorsque je demande d'ouvrir la boite de dialogue qui m'intéresse!!!

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    voici mon code :
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    void CInfos::GetInfo(CArray <CReparation,CReparation&>& tableau, CString requete)
    {
    	for (int i=0;i<tableau.GetSize();i++) // Pour tout le tabelau
    	{
    		if ( requete== tableau.ElementAt(i).GetRequete() ) // quand on rencontre la requête voulue
    		{
    			m_valueReq= tableau.ElementAt(i).GetRequete();      //récupère les infos dont nous avons besoin
    			m_valueEquip= tableau.ElementAt(i).GetEquipement();			
    			m_valueRef= tableau.ElementAt(i).GetReference();
    			if(m_valueilot !=" ")
    			{
    				m_valueilot= tableau.ElementAt(i).GetIlot();
    			}
    			if(m_valueST !=" ")
    			{
    				m_valueST= tableau.ElementAt(i).GetLibST();
    			}
    			if (tableau.ElementAt(i).GetNoSerieCli() != " ")
    			{
    				m_valueNoSerie= tableau.ElementAt(i).GetNoSerieCli();
    			}
    			else
    			{
    				m_valueNoSerie= tableau.ElementAt(i).GetNoSerie();
    			}
     
    			m_valueClient= tableau.ElementAt(i).GetClient();
    			m_valueGestion= tableau.ElementAt(i).GetGestionnaire();
     
     
    			if (tableau.ElementAt(i).GetDateArriveeMateriel() != " " && tableau.ElementAt(i).GetDateArriveeMateriel() != "")
    			{
    				m_valueDateArrivee = tableau.ElementAt(i).GetDateArriveeMateriel();
    				m_valuerectpec.ShowWindow(TRUE);	// on affiche le rectangle vert prise en compte (l'image bitmap)
    				m_valueencourpec.ShowWindow(FALSE);	// le rectangle vert en cour n'est pas affiché
    			}
    			else
    			{
    				m_valueDateArrivee = "vide";
    				m_valueencourpec.ShowWindow(TRUE);	// on affiche le rectangle vert en cour prise en compte
    				m_valuerectpec.ShowWindow(FALSE);	// le rectangle vert prise en compte n'est pas affiché
    			}
     
    			if (tableau.ElementAt(i).GetDateDebutRep() != " " && tableau.ElementAt(i).GetDateDebutRep() != "")
    			{
    				m_valueDateDebutRep = tableau.ElementAt(i).GetDateDebutRep();
    			}
    			else
    			{
    				m_valueDateDebutRep = "vide";
    			}
     
    			if (tableau.ElementAt(i).GetDatePrev() != " ")
    			{
    				m_valuePrevOuObj= tableau.ElementAt(i).GetDatePrev();
    			}
     
    			else
    			{
    				if (tableau.ElementAt(i).GetDateObjective()!="00/00/00")  //s il y a une date objective...
    				{
    					m_valuePrevOuObj= tableau.ElementAt(i).GetDateObjective();  //...on l'affiche
    				}
    				else								    //sinon...	
    				{
    					m_valuePrevOuObj="    --> Contactez le gestionnaire ";	    //...on affiche "contactez..."	
    				}
    			}
    			if(tableau.ElementAt(i).GetDateRedacDev()!=" ")// && tableau.ElementAt(i).GetDateRedacDev()!="")
    			{
    				m_valueRedacDevis=tableau.ElementAt(i).GetDateRedacDev();
    			}
    			else
    			{
    				m_valueRedacDevis = "vide";
    			}
    			if (tableau.ElementAt(i).GetDateContractuelle()!=" " && tableau.ElementAt(i).GetDateContractuelle()!="")
    			{
    				m_valueDateContr = tableau.ElementAt(i).GetDateContractuelle();
    			}else
    			{
    				m_valueDateContr = "vide";
    			}
    			if (tableau.ElementAt(i).GetDateBLST()!=" " && tableau.ElementAt(i).GetDateBLST()!="")
    			{
    				m_valueDateBLST= tableau.ElementAt(i).GetDateBLST();
    			}else
    			{
    				m_valueDateBLST="vide";
    			}
     
     
    		}
    	}	
    }

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 457
    Par défaut
    Je ne connais pas de classe MFC dérivant de CWnd qui prend un boolean comme seul paramètre de méthode "ShowWindow".
    Quelle est la classe de "m_valuerectpec" et de "m_valueencourpec" ?

    Si vous ne savez pas vous servir du debuggeur, commencez par là.
    Sinon, ce n'est plus de la progammation mais de la divination.

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    Elles sont de types CStatic!!!

    Base de la class : CDialog

  12. #12
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Bonjour,

    Ce que bacelar voulait dire, c'est que la méthode ShowWindow prend en paramètre un entier. En général on utilise les macros SW_SHOW ou SW_HIDE...

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    Ok d'accord mais quelle va être la commande pour afficher ou masquer mon image?

  14. #14
    Membre éprouvé
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Par défaut

  15. #15
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    j'ai regardé dans les tutoriels mais j'ai pas trouvé ce que je cherchais !

    je vous joint une image de ma boite de dialog :

    Les rectangles vert et autres sont les images bitmap que j'ai crée et j'aimerais en fonction des dates que je vais chercher afficher ces différents rectangles !

    Es ce que les images bitmap sont la bonne solution?

    j'utilise ShowWindow mais je ne pense pas que se soit ce qu'il faut pour afficher mes images !
    Images attachées Images attachées

  16. #16
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 457
    Par défaut
    Je pense que c'est pourtant clair en lisant la doc :
    http://msdn.microsoft.com/en-us/libr...c7(VS.80).aspx

  17. #17
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    Oui j'ai déjà lu ce que tu me post mais j'ai toujours mon erreur lorsque je lance mon appli!!!!

  18. #18
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    Es ce que vous avez regardé le fichier que j'ai joint dans mon post page 1 fin de page?

    Es ce que j'ai bien choisi la bonne solution(cad bitmap) pour afficher mes rectangles?

  19. #19
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    Faut-il rajouter une librairie lorsque on veut afficher des images bitmap? si oui, laquelle?
    merci

  20. #20
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    j'ai regarder dans les FAQs et j'ai pris le bout de code qui permet d'afficher une image bitmap depuis les ressources.
    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
    CInfos::OnDraw(CDC *pDC)
    {
        CBitmap Bitmap;
        CDC MemDC;
     
        Bitmap.LoadBitmap(IDB_RECTPEC); // lecture bitmap dans les ressources
        BITMAP InfosBmp; // structure d'informations.
        Bitmap.GetBitmap(&InfosBmp);
        MemDC.CreateCompatibleDC(pDC);// creation d'un DC en memoire
        MemDC.SelectObject(&Bitmap); // selection du bitmap dans le DC en memoire
        // transfert final du bitmap dans le dc de la view.
        pDC->BitBlt( 0,0,InfosBmp.bmWidth, InfosBmp.bmHeight,
                         &MemDC,
                         0,0,
                         SRCCOPY);
    }
    Je n'arrive pas a voir ce que réalise cette fonction!!! car lorsque j'ai créé ma boite de dialogue j'ai déja insérer mes images bitmap!

    J'aimerais pouvoir afficher et masquer ces images? Comment faire SVP?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Affichage d'un bitmap dans la zone client
    Par BigMike dans le forum MFC
    Réponses: 3
    Dernier message: 03/11/2006, 00h34
  2. Réponses: 25
    Dernier message: 27/03/2006, 11h00
  3. Réponses: 4
    Dernier message: 28/02/2006, 14h25
  4. Boite dialogue + Affichage d'un bitmap
    Par gids01 dans le forum MFC
    Réponses: 8
    Dernier message: 23/11/2005, 16h50
  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