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 :

[mfc]dessin


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut [mfc]dessin
    bjr je voudrai dessiner sur une dialog 25 rectange de taille(30,20)qui représente une image(5*5). un rectangle = 1pixel.?
    et je voudrai aussi savoir comment faire pr qd je dessine un trait a la souris ,elle prenne en compte que un rectangle = 1pixel.?


    merci

  2. #2
    mat.M
    Invité(e)
    Par défaut
    elle prenne en compte que un rectangle = 1pixel.?
    Pour moi ce genre d'action peut être effectuée par CDC::GetPixel
    Je n'arrive pas à comprendre le problème ?
    Est-ce pour dessiner à main levée ?

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut [mfc] dessin
    oui c pr dessiner a main lever mon image qui fait 5*5 pixel par exemple.
    dc il faut qd je dessine un pixel tous un rectangle soit colorier pris en compte.

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut [mfc] dessin
    un pixel de mon image = un rectangle de (30,20) par exemple.

  5. #5
    mat.M
    Invité(e)
    Par défaut Re: [mfc] dessin
    Citation Envoyé par marseillais57
    oui c pr dessiner a main lever mon image qui fait 5*5 pixel par exemple.
    dc il faut qd je dessine un pixel tous un rectangle soit colorier pris en compte.
    Là je commence à comprendre un peu plus .
    C'est pour créer un éditeur d'icône ou de personnages animés ??

    Pour dessiner tous les n pixels , il suffit de faire une boucle de ce genre dans l'événement OnMouseMove en s'assurant que le bouton gauche soit enfoncé:
    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
     
    CRect rect;
    int x;
    int y;
    for(y=0;y<HAUTEUR_MAX;y+=pas_increment)
    {
    for(x=0;x<LARGEUR_MAX;x+=pas_increment)
    {
    rect.top=y;
    rect.left=x;
    rect.right=rect.left+dimension_voulue;
    rect.bottom=rect.top+dimension_voulue;
     
    if( ::PtInRect(&rect , point) {
    CDC dc=CDialog::GetDC();
    dc.FillRect(rect);break;
    CDialog::ReleaseDC(dc);
     
    }
    }
    }
    Bon peut-être que quelqu'un d'autre trouvera quelque chose de plus subtil mais ça doit marcher

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut [mfc] dessin
    mat.M, qd je compile ta fct g plein d'erreur au niveau du if, il me dis :

    initializing' : cannot convert from 'class CDC *' to 'class CDC', pr la 1er ligne.
    FillRect' : function does not take 1 parameters, pr la 2eme.
    'ReleaseDC' : cannot convert parameter 1 from 'class CDC' to 'class CDC *', pr la 3eme

    pr la 2 eme je crois qu'il manque un HBRUSH mais je suis pas sur.
    Et pr le rest je sait pas du tous.

  7. #7
    mat.M
    Invité(e)
    Par défaut
    mat.M, qd je compile ta fct g plein d'erreur au niveau du if, il me dis :

    initializing' : cannot convert from 'class CDC *' to 'class CDC', pr la 1er ligne.
    FillRect' : function does not take 1 parameters, pr la 2eme.
    'ReleaseDC' : cannot convert parameter 1 from 'class CDC' to 'class CDC *', pr la 3eme

    pr la 2 eme je crois qu'il manque un HBRUSH mais je suis pas sur.
    Et pr le rest je sait pas du tous.

    Vraiment désolé , j'ai pondu ce code à la va vite et j'ai pas VC sous la main.
    Il faut déclarer ReleaseDC(&dc) et non ReleaseDC(hdc)

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cdc.3a3a.fillrect.asp

    Oui il faut créer un CBrush pour FillRect

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cdc.3a3a.fillrect.asp

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut [mfc] dessin
    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
     
    void CLCDPadDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
     
    CRect rect; 
    CBrush brush ;
    brush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0));
    int x; 
    int y; 
    int HAUTEUR_MAX=20;
    int LARGEUR_MAX=30;
    if(nFlags & MK_LBUTTON){
    for(y=0;y<HAUTEUR_MAX;y+=5) 
    { 
    	for(x=0;x<LARGEUR_MAX;x+=5) 
    		{ 
    			rect.top=y; 
    			rect.left=x; 
    			rect.right=rect.left+20; 
    			rect.bottom=rect.top+30; 
     
    			if( ::PtInRect(&rect , point) )
    			{ 
     
    					CDC dc1;
    					dc1.SelectObject(&brush);
    					dc1.FillRect(rect,&brush);break; 
    					CDialog::ReleaseDC(&dc1); 
     
    			} 
    		} 
    }
    }
    	CDialog::OnMouseMove(nFlags, point);
    }
    et rien ne fonctionne.

    aidez moi svp

  9. #9
    mat.M
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CDC dc1; 
                   dc1.SelectObject(&brush); 
                   dc1.FillRect(rect,&brush);break; 
                   CDialog::ReleaseDC(&dc1);
    C'est normal !! Il manque CDC::GetDC() !
    dc1=CDialog::GetDC();

  10. #10
    mat.M
    Invité(e)
    Par défaut
    Ce code là devrait tourner :

    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
     
    void CLCDPadDlg::OnMouseMove(UINT nFlags, CPoint point) 
    { 
     
    CRect rect; 
    CBrush brush ; 
    brush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0)); 
    int x; 
    int y; 
    int HAUTEUR_MAX=20; 
    int LARGEUR_MAX=30; 
    if(nFlags & MK_LBUTTON){ 
    for(y=0;y<HAUTEUR_MAX;y+=5) 
    { 
       for(x=0;x<LARGEUR_MAX;x+=5) 
          { 
             rect.top=y; 
             rect.left=x; 
             rect.right=rect.left+20; 
             rect.bottom=rect.top+30; 
     
             if( ::PtInRect(&rect , point) ) 
             { 
     
                   CDC dc1; 
    dc1=CLCDPadDlg::GetDC();
                   dc1.SelectObject(&brush); 
                   dc1.FillRect(rect,&brush);break; 
                   CLCDPadDlg::ReleaseDC(&dc1); 
     
             } 
          } 
    } 
    } 
       CDialog::OnMouseMove(nFlags, point); 
    }

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut [mfc] dessin
    justement c de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CDC dc1=CLCDPadDlg::GetDC();
    que vient l'erreur.
    il me tjrs "'initializing' : cannot convert from 'class CDC *' to 'class CDC'"

  12. #12
    mat.M
    Invité(e)
    Par défaut
    C'est ce qu'il me semblait ; il faut utiliser CDC *dc1 et non dc1 c.a.d. un pointeur
    A chaque utilisation de dc1 , remplacer le point par "->"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dc1->SelectObject(&brush); 
    dc1->FillRect(rect,&brush);break;

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut [mfc] dessin
    voici mon code avec les modif [/code]void CLCDPadDlg::OnMouseMove(UINT nFlags, CPoint point)
    {

    CRect rect;
    CBrush brush ;
    brush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0));
    int x;
    int y;
    int HAUTEUR_MAX=20;
    int LARGEUR_MAX=30;
    if(nFlags & MK_LBUTTON){
    for(y=200;y<HAUTEUR_MAX;y+=5)
    {
    for(x=200;x<LARGEUR_MAX;x+=5)
    {
    rect.top=y;
    rect.left=x;
    rect.right=rect.left+20;
    rect.bottom=rect.top+30;

    if( :tInRect(&rect , point) )
    {
    CDC *dc1=CLCDPadDlg::GetDC();


    dc1->SelectObject(&brush);
    dc1->FillRect(rect,&brush);break;
    CLCDPadDlg::ReleaseDC(dc1);
    }
    }
    }
    }
    CDialog::OnMouseMove(nFlags, point);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     mais rien qui se passe qd j'appuie sur clic gauche
     
     :arf:

  14. #14
    mat.M
    Invité(e)
    Par défaut
    Cela doit venir des coordonnées écran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(y=200;y<HAUTEUR_MAX;y+=5) 
    { 
    for(x=200;x<LARGEUR_MAX;x+=5) 
    {
    Faire un test pour s'assurer que l'on dessine bien à l'écran : simplement sur l'événement MouseMove , dessiner avec SetPixel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CDC *dc=GetDC()...
    dc->SetPixel(point.x,point.y, RGB(255,0,0);
    ReleaseDC...
    Désactiver une partie du code avec des commentaires /* */

  15. #15
    mat.M
    Invité(e)
    Par défaut
    Hé le Marseillais , il ya un problème dans ces lignes de code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int HAUTEUR_MAX=20; 
    int LARGEUR_MAX=30; 
    if(nFlags & MK_LBUTTON){ 
    for(y=200;y<HAUTEUR_MAX;y+=5) 
    { 
    for(x=200;x<LARGEUR_MAX;x+=5)

  16. #16
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 25
    Points : 16
    Points
    16
    Par défaut [mfc] dessin
    merci bcp mat.M g pas fait attention.

    merci bcp

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

Discussions similaires

  1. [MFC] Dessiner dans une boîte de dialogue
    Par Philippe320 dans le forum MFC
    Réponses: 5
    Dernier message: 03/03/2006, 21h44
  2. Réponses: 3
    Dernier message: 31/10/2005, 16h47
  3. [MFC] Dessin dans une boite de dialogue .
    Par Platypus dans le forum MFC
    Réponses: 8
    Dernier message: 21/07/2005, 11h21
  4. Réponses: 2
    Dernier message: 02/07/2005, 19h14
  5. [MFC] Dessiner sur un Owner Draw
    Par gwendo dans le forum MFC
    Réponses: 1
    Dernier message: 27/04/2005, 11h21

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