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

C++ Discussion :

Prob, SDI et boucle


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut Prob, SDI et boucle
    Je crois que mon problème ce trouve au niveau de ma fct de dessin OnDraw(). Il semble qu'après un nombre aléatoire de fois, mon programme me met un point en [0,0] pour je ne sais trop pour quelle raison et le programme gèle à ce momment. Sûrment dû à mon incompétence au niveau des boucles... et des listes chaînées...

    Et également... je cherche un moyen à partir d'une thread, dans mon fichier --> CDathsProPaintDoc.cpp <--, de faire redessiner ma fenêtre. Je ne peut acceder à un pointer vers mon View, qui contient la fct RedrawWindow(). Seul le Frame peut avoir accès à ça, par la fct GetActiveWindow().
    Le tout est un programme de type SDI, sous .Net

    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
    96
    97
    98
    void CDathsProPaintView::OnDraw(CDC* pDC)
    {
    	CDathsProPaintDoc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	if (!pDoc)
    		return;
     
    	// TODO : ajoutez ici le code de dessin pour les données natives
    //----------------------------------------------------------------------------------------------
    //----------------------------------------------------------------------------------------------
     
    	int i = 0, code = -1;
    	POINT current = {0, 0}, prev = {0, 0};
    	CPen crayon(PS_SOLID, 3, RGB(0,0,0));
     
    	pDC->SelectObject(&crayon);
    	pDC->SelectStockObject(NULL_BRUSH);
     
    	for(i = 0; i <= pDoc->m_NbPts; i++)
    	{
    		if(i == 0)	//il n'a aucune valeur, donc premier passage dans la boucle
    		{
    			prev = pDoc->m_Tableau.GetPointAtIndex(i); //m_Tableau est une variable de type STab
    			current = prev;
    			pDC->MoveTo(current);
    		}
    		else
    		{
    			prev = current;
    			current = pDoc->m_Tableau.GetPointAtIndex(i);
    		}
     
    		if(current.x >= 0 && prev.x >= 0)	//si les points sont valides
    		{
    			switch(pDoc->m_Tableau.GetCodeAtIndex(i))
    			{
    				case 0:		//traitement du free-hand
    			//----//-----------------------------------------------------------
    							if(code == 0)
    							{//le dernier point est aussi de code 0
    								pDC->LineTo(current);
    							}
    							else
    							{//trace un point unique
    								pDC->MoveTo(current.x - 1, current.y - 1);
    								pDC->LineTo(current);
     
    								code = 0;	//on met le code pour le prochain passage
    							}
    							break;
     
    				case 1:		//traitement de line
    			//----//-----------------------------------------------------------
    							if(code == 1)
    							{//le dernier point est aussi de code 1
    								pDC->LineTo(current);
    								code = -1;
    							}
    							else
    							{
    								code = 1;	//on met le code pour le prochain passage
    							}
    							break;
     
    				case 2:		//traitement de square
    			//----//-----------------------------------------------------------
    							if(code == 2)
    							{//le dernier point est aussi de code 2
    								pDC->Rectangle(prev.x, prev.y, current.x, current.y);
    								code = -1;
    							}
    							else
    							{
    								code = 2;	//on met le code pour le prochain passage
    							}
    							break;
     
    				case 3:		//traitement de cercle
    			//----//-----------------------------------------------------------
    							if(code == 3)
    							{//le dernier point est aussi de code 3
    								pDC->Ellipse(prev.x, prev.y, current.x, current.y);
    								code = -1;
    							}
    							else
    							{
    								code = 3;	//on met le code pour le prochain passage
    							}
    							break;
    			}// fin de: [ switch() ]
     
    		pDC->MoveTo(current);	//réinitialise notre point d'ancrage
    		}//fin de: [ if(current.x >= 0 && prev.x >= 0) ]
    	}//fin de: [ for() ]
     
    //----------------------------------------------------------------------------------------------
    //----------------------------------------------------------------------------------------------
    }

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Salut !


    toi tu ferais bien de relire les règles un petit coup...

    c'est QUOI ton problème ? parce que j'ai déjà rangé ma boule de cristal moi...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    Citation Envoyé par Swoög
    Salut !


    toi tu ferais bien de relire les règles un petit coup...

    c'est QUOI ton problème ? parce que j'ai déjà rangé ma boule de cristal moi...
    (j'ai éditer mon premier message.... trop de code et pas précis, encore dsl Swoög)
    hehe, dsl >_< bon voilà j'ai un peu changer de direction loll Je crois que mon problème ce trouve plutôt au niveau de ma fct de dessin. Il semble qu'après un nombre aléatoire de fois, mon programme me met un point en [0,0] pour je ne sais trop quelle raison et le programme gèle à ce momment.

    J'ai un serveur, des clients. Le serveur ouvre un socket, sur lequel les clients envoyent leur demande de connection. Le serveur lance donc une thread pour chacun d'eux et écoute ce que mes clients lui envoye. Lorsqu'il reçoit des données (soit des coordonnées de points) il les redirige vers les autres client. (programme de dessin multi-client ^^).

    Donc... le problème est soit lié à des données erronée envoyées du serveur. Ou... de ma fct de dessin qui lit mal quelque part.

    Aussi, j'ai créé une classe CListe, qui comprend ses fcts et 2 structures, la base de mes données. Si cela peut vous aider les voici.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //SPosition est la structure qui contient toutes les données relative aux points du dessin
    struct SPosition{
    	int index;	//le numéro du point, sert à la suppression des points
    	POINT pt;	//coordonnées du pt
    	int code;	// 0 = free, 1 = line, 2 = square, 3 = cercle, 4 = à effacer
    };
     
    //STab est la structure qui sert de liste chaînée
    struct STab{
    	STab* prev;		//pointeur sur l'élément précédent
    	SPosition pos;	//les données du point, voir la structure SPosition
    	STab* next;		//pointeur sur l'élément suivant
    };

Discussions similaires

  1. Prob boucle for next avec recherche chaine
    Par papajn dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 11/08/2011, 18h44
  2. [VB6]Prob boucle while
    Par elhosni dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 12/05/2006, 16h35
  3. [Ajax] Prob passage de param. dans boucle [DOM]
    Par narnou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/02/2006, 16h54
  4. Réponses: 10
    Dernier message: 05/04/2005, 10h25
  5. Réponses: 2
    Dernier message: 29/05/2002, 20h43

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