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 dans une boite de dialogue .


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 67
    Points : 47
    Points
    47
    Par défaut [MFC] Dessin dans une boite de dialogue .
    Bonjour

    voila ,j'ai un probleme avec le dessin dans ma classe dérivée de CDialog.
    voila en gros comment je procéde :

    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 CTestDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    	if((nFlags == MK_LBUTTON) && IsPointValid(d_Point) && IsPointValid(point))
    	{			
    		HPEN drawpen = CreatePen(PS_SOLID,1,RGB(200,0,255));
    		CDC* cdc = GetWindowDC();
    		HDC hdc = cdc->GetSafeHdc();
    		SelectObject(hdc,drawpen);
    		MoveToEx(hdc,d_Point.x,d_Point.y,&d_Point);
    		LineTo(hdc,point.x,point.y);
    		DeleteObject(drawpen);
    	}
     
    	d_Point = point;
    	m_Xpos.Format("%d",point.x);
    	m_Ypos.Format("%d",point.y);
     
    	UpdateData(false);
     
    	CDialog::OnMouseMove(nFlags, point);
    }
    d_Point est un CPoint variable membre de ma classe dans lequel je sauvegarde le poinr pour tracer un trait avec le nouveau point que je recois dans OnMouseMove() .
    le Code conditionnel au début empeche de dessiner dans une partie de la boite de dialogue la ou il ya 2 boutons et 2 textes correspondants aux coordonnées qui sont mis a jour juste avant le UpdateData(false) .

    Tout ca fonctionne , mais au bout d'un moment ca s'arrete de dessiner sans raison .
    le trait de dessin ici est violet . ET juste avant que ca plante le trait passe noir sur 2 ou 3 cm ( a l'écran ) puis plus rien .

    Si qq'un a une idée ?

  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,
    plusieurs choses :
    ton code peut etre ecrit comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CDC* pdc = GetWindowDC();
          CPen drawpen(PS_SOLID,1,RGB(200,0,255));
     
          pdc->SelectObject(drawpen);
          MoveToEx(pdc->GetSafeHdc(),d_Point.x,d_Point.y,&d_Point);
          pdc->LineTo(point);
          ReleaseDC(pdc);
    autant utiliser les objets MFC quand c'est possible.
    ton plantage doit venir du fait que tu ne libere pas le CDC.
    autre chose faire UpdateData dans un message souris n'est pas une tres bonne idéev voire tres mauvaise....
    Autre point ,en cas de recouvrement de ta fenetre ton dessin ne sera pas raffraichit .

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 67
    Points : 47
    Points
    47
    Par défaut
    merci

    ca l'air mieux . j'ai pas encore eut de plantage en tout cas avec ta mise a jour .

    par contre pour le updatedata , comment faire pour afficher les coordonnées du pointeur dans ce cas ? y aurait'il une astuche ? :p

    et enfin cette fenetre est juste une fenetre de test , en TOPMOST donc si le dessin et perdu en casde recouvrement ce n'est pas important .
    a moins que ca pose des problemes pour le systeme ?

  4. #4
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    je ne suis pas convaincu que ton code va dessiner. Le dessin de la boite de dialog se fait sur le OnDraw donc ta ligne va s'afficher de maniere temporaire et va etre effacer au prochain Invalidate
    il y a du linge sur la corde à linge

  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
    C’est quoi le pointeur ?
    Quelle est la variable devant être mise à jour par UpdateData ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 67
    Points : 47
    Points
    47
    Par défaut
    Et pourtant il tourne ...

    bon sans me prendre pour Galilée , rellement ca fonctionne .

    par contre c'est clair que je veux pas faire un photoshop .

    pour tout dire mon application sert a parametrer du matériel tactile .
    et cette fenetre sert juste a tester la calibration de celui ci et son bon fonctionnement .

    j'avais quelque chose qui fonctionnait mal . maintenant ca fonctionne un peu moins mal

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 67
    Points : 47
    Points
    47
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    m_Xpos.Format("%d",point.x);
    m_Ypos.Format("%d",point.y);
    m_Xpos et m_Ypos sont 2 CString crée avec le classwizard sur des "Static Text" .
    si je met pas le UpdateData(false); les valeurs sont pas mis a jour .

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    tu peux utiliser direct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SetDlgItemInt(IDC_xxx, point.x);
    SetDlgItemInt(IDC_yyy, point.y);
    IDC etant l'id de ton control static.



  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 67
    Points : 47
    Points
    47
    Par défaut
    bon bah voila .

    tout est nikel chrome

    Merci Farscape.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/01/2011, 13h24
  2. compteur de temps dans une boite de dialogue MFC
    Par Espoir27 dans le forum MFC
    Réponses: 6
    Dernier message: 17/05/2010, 12h06
  3. Réponses: 2
    Dernier message: 17/11/2007, 13h48
  4. [MFC] Dessiner dans une boîte de dialogue
    Par Philippe320 dans le forum MFC
    Réponses: 5
    Dernier message: 03/03/2006, 21h44
  5. [mfc] affichage dans une boite de dialog
    Par chronos dans le forum MFC
    Réponses: 3
    Dernier message: 14/06/2004, 15h12

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