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 :

Probl�me CFormview MFC


Sujet :

MFC

  1. #1
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    85
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Par d�faut Probl�me CFormview MFC
    Bonjour,
    Voila, j'ai un petit soucis, je souhaite dessiner dans une fenetre, et meme dans une list box ou un truc de ce genre lol.
    Malheureusement, dans la boite de dialog ou je suis je n'ai pas la focntion OnDraw ...
    En faite j'ai un menu dans mon projet, je clique sur un bouton et cela m'affiche une boite de dialog de type FormView.
    Comme il n'y a pas de fct OnDraw j'ai essay� avec la fct OnPaint mais sa ne marche pas, je creer bien un rectangle mais sa ne me l'affiche pas !!

    Comment faire pour :

    Avoir cette fonction OnDraw ?
    Pour afficher dans une list box quelques choses de ce genre ?

  2. #2
    Membre exp�riment� Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par d�faut
    tu veux dessiner dans une FormView ou dans une DialogBox ??

  3. #3
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    85
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Par d�faut
    J eveux dessiner dans une CFormview, en faite j'ai trouv� la soluce , c'est � dire, que je creer une bitmap sur cette bitmap je creer le rectangle dans lekel je vais travailler ( mettre d'autres figures).
    Mais voila le truc maintenant c'est que je voudrais d�s que l'utilisateur clique dans cette zone, un dessin ce creer !! comment faire ?
    J'ai recuperer le message OnLButtonDown , d�s qu'il clic � gauche mais ensuite ???

    Merci

  4. #4
    Membre exp�riment� Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Par d�faut
    normalement, la m�thode OnPaint te fourni un device context.
    A toi de le manipuler. Pour dessiner un bmp, il te faut un aute device context temporaire dans le quel tu charges ton bmp avant de le recoper dans le device context d'affichage

  5. #5
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    85
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Par d�faut
    hum disons que le bitmap que je lance o debut c'est juste pour pouvoir faire des dessins dessus.
    Disons mon but c'est de faire sa :
    Dans une CFormview, d"s que je clique sur une zone que j'ai definie (fix�) sa me dessine un rectangle.

    Au debut je pensais utilis� la fonction OnDraw mais ce n'est pas possible.
    En effet, je creer une ressource de type dialog mais, si je creer une boite de type CDialog , je peux la lancer facilement avec maclasse.DoModal(); mais dans ce cas je n'ai pas la fct OnDraw
    Mais si je creer une boite de dialog de type CFormview, j'ai la fonction OnDraw mais je ne sais pas comment appeler la fen�tre, je n'est pas de DoModal();

    Quand je clique sur un bouton sa me lance cette fen�tre, donc avec le CDialog c est facile :


    void CMenu::OnBnClickedListe()
    {
    CDialog Bouton;
    Bouton.DoModal();
    }

    mais avec la CFormview je ne sais pas faire !!!!

  6. #6
    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,
    il ne faut pas dessiner dans le onpaint ou ondraw d'une CFormView (une CView ou CScrollView oui )
    le plus simple est d'utiliser la surface d'un controle dispos� a l'ecran pour dessiner dedans .
    voir cet exemple qui peut etre transpos� simplement:
    http://farscape.developpez.com/Samples/TestGraph.zip

  7. #7
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    85
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Par d�faut
    Ok niquel j'ai pu adapter :-) merci bcp

    Par contre moi j'ai trois fenetre de ce type, dans la meme View, comment on peut specifier de dessiner une figure dans un des contriles et une autre figures dans l'autre controle ??
    Tiens pendant que j'y suis si t'as une id�e pour l'histoire du clique je suis preneur :-D

    Edit: j'ai trouv� pour les trois feneter mais pas pour le clique

  8. #8
    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
    hum ,j'ai pas bien compris !,
    tu veux un message quand tu clic sur la zone de dessin c'est �a ?

  9. #9
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    85
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Par d�faut
    Hum presque :-D j'aimerais d�s qu'il clique sur ma zone bouton, que cela me creer une figure geometrique � cet endroit du clique. (la figure c'est moi qui decide laquel, c'est du static). Et par exemple, il clique 5 fois dans la zone de controle, j'aurais 5 dessins selon la ou j'ai cliqu� .

    merci :-)

  10. #10
    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
    et bien c'est pas tres compliqu� ,vu que le control utilis� est un bouton
    tu peux generer le message BN_CLICKED dessus
    dans le message tu peux utiliser la fonction GetCursorPos pour trouver les coordonn�es de la souris qu'il faudra convertire en coordonn�es de la fenetre
    avec ScreenToClient.
    apres tu peux organiser ton dessin ..
    [/b]

  11. #11
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    85
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Par d�faut
    H� oui j'avais deja pens� au message OnLButtonDown(UINT nFlags, CPoint point) .
    J ai tester avec ton message, c'est mieux dans le sens ou c'est que cette fenetre qui est accessible, mais comme je le pensais mon probl�me reside dans comment dessiner quand ke clique, je peux appeler la fonction OnDrawItem ? si oui je met quoi pour ce parametre LPDRAWITEMSTRUCT lpDrawItemStruct ?
    Paske sinon je vois pas comment, faire, je vais pas declarer un type CDC* dans le bouton , enfin je pense pas !!

    merki :-)

  12. #12
    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
    le principe general est qu'un control doit soit savoir se redessiner si il est masqu� .
    �a veut dire aussi que si le dessin doit evoluer il va falloir stocker l'historique des commandes l'ayant gener� ou memoriser son dernier etat dans un bitmap.
    rien ne t'empeche d'appeler un fonction membre du controle concern� pour lui indiquer la prochaine sequence a dessiner .
    ensuite il suffira de faire un Invalidate sur le controle pour qu'il se redessine en completant son dessin en fonction des dernieres instructions memoris�es.


  13. #13
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    85
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Par d�faut
    hum ok, pas evident

    Alors j'ia trouv� sa sur les msdn :
    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
     
    void CTestView::OnChangeRect()
    {
      // Change Rectangle size.
      m_rcBox = CRect(20, 20, 210, 210);
     
      // Invalidate window so entire client area
      // is redrawn when UpdateWindow is called.
      Invalidate();  
     
      // Update Window to cause View to redraw.
      UpdateWindow();
    }
     
    // On Draw function draws the rectangle.
    void CTestView::OnDraw(CDC* pDC)
    {
    //  ..  Other draw code here.
     
      pDC->Draw3dRect(m_rcBox, 0x00FF0000, 0x0000FF00);
    }
    mais je vosi pas comment sa peu marcher, vu qu'on envoi pas la valeur de m_rcBox � la fonction OnDraw ...

    J ai voulu faire la meme chose, c'est � dire dans le bouton BN_CLICKED
    je met le nouveau rectangle a tracer, dans ce style :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    	CRect rec(20, 20, 210, 210);	
    	Invalidate();
    puis un updatewindow() pour relancer on paint , ainsi l devrait modifer la taille du rectangle mais sa marche pas

    comme je te disais j 'arrive opas a dessiner dans ce bouton les nouveaux rectangle
    [pense a mettre la balise de code ,Merci Farscape]

  14. #14
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    85
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Par d�faut
    Bon alors j'ai trouv� un debut de soluce, c'est � dire que je fais dans mon bouton :
    GetClientDC dc(this)
    et apr�s je peux dessiner !!! Donc j'arrive � dessiner les figures que je veux � l'endroit ou je clique

    Par contre maintenant des petits prob se posent (encore !!! )

    D'abord, comment je peux effacer la figure que je viens de tracer, ou encore, comment je fais pour ne pas qu'il dessine une figure sur celle que je viens de faire ?

    erf merci

  15. #15
    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
    pour effacer ta surface:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    dc.PatBlt(0,0,m_Rect.Width(),m_Rect.Height(),WHITENESS);
    ta solution ne fonctionne pas en cas de recouvrement de ton control.
    Citation Envoy� par farscape
    Le principe general est qu'un control doit soit savoir se redessiner si il est masqu� .

  16. #16
    Membre confirm�
    Inscrit en
    Janvier 2006
    Messages
    85
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 85
    Par d�faut
    Merci pour l'effacement, mais pour le recouvrement je vois pas bien ce ke tu veux dire!!
    Pour l'instant je peux dessiner , redessiner sur la meme figure etc...
    Mais j'avais penser a stocker dans un pointeur , ou objet, tous les rectangle creer etainsi faire une condition dessus pour ne pas qu'il puiss reecrire dessus, il fo ke je vois sa plus en detali .

  17. #17
    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
    Citation Envoy� par denebj
    Merci pour l'effacement, mais pour le recouvrement je vois pas bien ce ke tu veux dire!!
    Pour l'instant je peux dessiner , redessiner sur la meme figure etc...
    Mais j'avais penser a stocker dans un pointeur , ou objet, tous les rectangle creer etainsi faire une condition dessus pour ne pas qu'il puiss reecrire dessus, il fo ke je vois sa plus en detali .
    et bien tu prends une autre fenetre style l'explorateur windows et tu la place par dessus ton programme et tu l'enleves ,d'apres toi comment va se repeindre ton control ?

    [note,fait des efforts sur l'ecriture le style abr�g� n'est pas accept� sur le forum ,Merci]

Discussions similaires

  1. Probl�me OpenGL + MFC
    Par l'archiviste dans le forum MFC
    R�ponses: 0
    Dernier message: 31/08/2009, 09h48
  2. Probl�me avec MFC
    Par ra3ra3 dans le forum MFC
    R�ponses: 1
    Dernier message: 25/05/2008, 21h45
  3. Probl�me slider MFC avec visual studio
    Par superjoe dans le forum MFC
    R�ponses: 4
    Dernier message: 03/05/2007, 09h53
  4. Probl�me Programmation MFC
    Par xyz dans le forum MFC
    R�ponses: 17
    Dernier message: 13/05/2006, 20h00
  5. Probl�me Programmation MFC
    Par xyz dans le forum R�seau
    R�ponses: 3
    Dernier message: 13/05/2006, 14h36

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