begin process at 2012 05 29 21:00:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

GUI

 > 

un probleme de calcul de courbe


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

un probleme de calcul de courbe

dimanche 22 octobre 2006 à 12:04:56 | un probleme de calcul de courbe

Cyr62110

Voila mon probleme, je creer un programme dessinant des courbes (fonction,point par point).
Mais j'ai un probleme, lors ce que je teste et je rentre les valeur mini, maxi rien ne se passe et dés que je met des static à la place de simple int le programme plante dés le demarrage.
Pouvait vous m'aider ?
Voici le code:
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        RECT rcClient;
        POINT Poly [4]  = {425,10,
                           425,310,
                           775,310,
                           775,10                                                                    
                          };
        int firstx = 425;
        int secondx = 775;
        int firsty = 10;
        int secondy = 310;
        int x;
        int y;
        int refx;
        int refy;
        int paint;
        int dist = 0;
        int xmin = 0,xmax = 0;
        HPEN absord = (HPEN) CreatePen (PS_SOLID,2,RGB(0,0,0));
        HPEN courbee = (HPEN) CreatePen (PS_SOLID,2,RGB(255,55,16));
    switch (message)                  /* handle the messages */
    {
        case WM_CREATE:
             CreateFirst(hwnd);
             CreateSecond (hwnd);
             CreateThird(hwnd);
             CreateFourth(hwnd);
             break;
        case WM_COMMAND:
             if (LOWORD(wParam) == IDE_DIST && HIWORD(wParam) == EN_CHANGE)
             {
                                GetWindowText (hdist,egal,10);
                                dist = atoi(egal);
                                GetClientRect(hwnd, &rcClient);
                                InvalidateRect(hwnd, &rcClient, false);
             }
             if (LOWORD(wParam) == IDE_XMAX && HIWORD(wParam) == EN_CHANGE)
             {
                                GetWindowText (hxmax,egal,10);
                                xmax = atoi(egal);
                                GetClientRect(hwnd, &rcClient);
                                InvalidateRect(hwnd, &rcClient, false);
             }
             if (LOWORD(wParam) == IDE_XMIN && HIWORD(wParam) == EN_CHANGE)
             {
                                GetWindowText (hxmin,egal,10);
                                xmin = atoi(egal);
                                GetClientRect(hwnd, &rcClient);
                                InvalidateRect(hwnd, &rcClient, false);
             }
             break;
        case WM_PAINT:
             HDC hDC;
             PAINTSTRUCT ps;
             POINT pos;
             hDC = BeginPaint (hwnd,&ps);
             Polygon (hDC,Poly,4 );
             MoveToEx (hDC,425,10,&pos);
             SelectObject (hDC,absord);
             LineTo(hDC,425,310);
             LineTo(hDC,775,310);
             //---
             MoveToEx (hDC,firstx,secondy,&pos);
             refx = (secondx - firstx) / xmax;
             refy = (secondy - firsty) / 10;
             for (paint = 0; paint <= xmax;paint+=dist)
             {
                 MoveToEx (hDC,firstx,secondy,&pos);
                 x = firstx + (paint*refx);
                 MoveToEx (hDC,x,310,&pos);
                 LineTo (hDC,x,305);
                 MoveToEx (hDC,firstx,secondy,&pos);
                 y = secondy - (paint*refy);
                 MoveToEx (hDC,425,y,&pos);
                 LineTo (hDC,430,y);
             }
             SelectObject (hDC,courbee);
             MoveToEx (hDC,firstx,secondy,&pos);
             for (paint = 0; paint <= xmax;paint+=dist)
             {
                 x = firstx + (paint*refx);
                 y = secondy - (paint*refy);
                 if( y < 10)
                 break;
                 LineTo (hDC,x,y);
             }
             //---
             EndPaint (hwnd,&ps);
             break;
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
dimanche 22 octobre 2006 à 13:15:17 | Re : un probleme de calcul de courbe

SnOOpss

Sans static ca ne peux pas marcher, vu que par exemple a un moment tu recoit le message WM_COMMAND tu definis xmax, la procedure se termine, xmax est detruite et au prochain message WM_PAINT xmax vaut 0.
C'est quoi ton message d'erreur si tu met les statics ?
Sinon initialise tes variables a l'exterieur de ta procedure.
dimanche 22 octobre 2006 à 13:25:01 | Re : un probleme de calcul de courbe

Cyr62110

J'ai deja essayer d'initialiser à l'exterrieur de la procedure et en mettant des statics mais le programme n'as pas de probleme de compilation ais au demarage il plante.
dimanche 22 octobre 2006 à 13:25:23 | Re : un probleme de calcul de courbe

SnOOpss

Pareil pour
HPEN absord = (HPEN) CreatePen (PS_SOLID,2,RGB(0,0,0));
il te faut le definir 1 SEULE fois au debut du fichier par exmple car a chaque appel a ta procedure tu recréé un HPEN et jamais tu ne le detruit >> fuite memoire.
dimanche 22 octobre 2006 à 13:29:09 | Re : un probleme de calcul de courbe

SnOOpss

Tu le teste bien en mode debug ? Met un point d'arret au debut au pire mais maintenant que j y pense le plantage peut venir de la fuite memoire.
Donne nous le message d'erreur
sinon deja >> refx = (secondx - firstx) / xmax; vu ke xmax = 0 division par zero > plantage
dimanche 22 octobre 2006 à 13:36:25 | Re : un probleme de calcul de courbe

aardman

Membre Club
Salut,
Y'a un gros probleme déja, au début de ta WndProc tu crée 2 pens que tu ne détruis pas, ca fait un (gros) memory leak. La WndProc est appelée très très souvent, et tu peux etre sur qu'au bout d'un moment ton programme plantera, a cause de la limite de nombre gdi que l'on peut créer.

dimanche 22 octobre 2006 à 14:00:59 | Re : un probleme de calcul de courbe

Ombitious_Developper

Salut :

Test de protection :

if (xmax == 0)
        xmax = 1;

dimanche 22 octobre 2006 à 14:06:53 | Re : un probleme de calcul de courbe

Cyr62110

Merci, vous m'avez permi de trouver la reponse.
static int dist;
static int xmin,xmax;
et il fallait rajouter
WM_CREATE :
CreateFirst (hwnd);
CreateSecond (hwnd);
CreateThird(hwnd);
CreateFourth(hwnd);
xmin = 0;
xmax = 10;
dist = 1;
break;
et surtout vous m'avez montré l'une des perte de memoire dont je ne trouver pas la cause.


Cette discussion est classée dans : int, hwnd, wparam, hdc, paint


Répondre à ce message

Sujets en rapport avec ce message

Edit Control [ par cybermatthieu ] Bonjours,Je suis en Train d'apprendre comment progrmmer en Win32 avec la Class Windows.h. Ce petit programme ne fait q'afficher des caracter mais j'ai Affichage bitmap [ par gregory6 ] GringoBonjour, je suis débutant ss visual C++ et j'aurai besoin d'un peu d'aide. Je crée un projet MFC ds lequel je crée une fenetre. Cette fenetre cr Decalement de 3 pixel dans le HDC [ par SnOOpss ] Bonjour !!! Pourquoi si je fait :     case WM_PAINT:         {     RECT rt;     PAINTSTRUCT ps;     HDC hdc = BeginPaint(GetParent(hwnd), &a erreur couleur pixel [ par DJtef ] Je cherche à récupérer les coordonnées et la couleur du pixel pointé par la souris, dans une simple console dos, sous Dev C++, mais j'ai les 2 message Fenetre au premier plan [ par SnOOpss ] Bonjour suite a mon probleme de capture d'ecran on resolu (cf http://www.cppfrance.com/forum.v2.aspx?ID=631298) j'ai essayé de prendre mon probleme au Sous classement foireux [ par HeavenForsaker ] Mon sous classement n'a pas l'air de fonctionner correctement, je voudrais receptionner le message WM_MOVING lors du déplacement de ma fenêtre. Voila PROBLEME DE CHARGEMENT JPEG DANS UN ECRAN DE VEILLE [ par Batman60 ] bonjourclic droit sur l'exe et puis "tester" le prog fonctionne à merveille mais une fois installé à l'execution de l'ecran de veille les textures jpe Probléme de compilation [ par makina0711 ] Bonjour a tous j'ai cette source pour ouvrire mon bmp mais a cette ligne il y a une ereure: DrawState(hdc,NULL,NULL,(long)hBmp,NULL,10,10,0,0,DST_BI Problème de linker dans programme de base. [ par vith17 ] Bonjour,J'ai tapé le code suivant sous Dev-C++. Lorsque je lance la compilation, il me revoie l'erreur suivante :    [Linker error] undefined referenc Problème windowproc dans une class [ par Mr.X ] Alors voila enfait j'aimerai utiliser un Windowproc dans une class Exemple : class CClass{ public :         LRESULT CALLBACK WProc(HWND, UINT, WPARA


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales