Tracer une courbe à partir d'un tableau dans une fenêtre

jul41 Messages postés 14 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 1 mai 2006 - 24 avril 2006 à 15:43
jul41 Messages postés 14 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 1 mai 2006 - 24 avril 2006 à 23:21
Salut! je dois réaliser un projet dont une partie consiste à tracer une courbe caractérisant une force appliquée sur un capteur. J'essaie pour ça de faire d'abord simple en traçant une courbe à partir d'un tableau, mais la courbe n'apparaît pas... j'ai utilisé plusieurs infos du site mais sans résultat, si vous pouviez me dire ce qui ne va pas svp. j'ai quelques notions en c et c++ mais rien en api.
une partie du programme est la suivante:

#include <Windows.h>


LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);


int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASSEX principale;
principale.cbSize=sizeof(WNDCLASSEX);
principale.style=CS_HREDRAW|CS_VREDRAW;
principale.lpfnWndProc=MainProc;
principale.cbClsExtra=0;
principale.cbWndExtra=0;
principale.hInstance=hInstance;
principale.hIcon=LoadIcon(NULL,IDI_APPLICATION);
principale.hCursor=LoadCursor(NULL,IDC_ARROW);
principale.hbrBackground=reinterpret_cast<HBRUSH>(COLOR_WINDOW+1);
principale.lpszMenuName=NULL;
principale.lpszClassName="std";
principale.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
RegisterClassEx(&principale);


HWND hWnd;
hWnd=CreateWindowEx(
WS_EX_CLIENTEDGE,
"std",
"fenetre",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hWnd,SW_SHOW);


MSG msg;
while(GetMessage(&msg,NULL,0,0)==TRUE)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}


LRESULT CALLBACK MainProc(HWND hWnd, UINT mes, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT paintst;
switch (mes)
{
case WM_PAINT:
hDC=BeginPaint(hWnd,&paintst);
int tab[15];
int i;
int value;
int compteur;
compteur=0;
for(i=1;i<=15;i++)
{
tab[i];
}
for(;;)
{
value=tab[compteur];
SetPixel(hDC,compteur,value,RGB(0,255,0)); //pixel de couleur verte
compteur+=1;
if(compteur==15) {break;}
}
EndPaint(hWnd,&paintst);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, mes, wParam, lParam);
}
}

11 réponses

Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
24 avril 2006 à 17:38
Salut, je veux pas dire de bêtises mais il me semble que tu devrais plutôt appliquer les appels de fonctoins SetPixel sur un HDC mémoire, pour créer ce MemDC utilise CreateCompatibleDC et n'oublie pas de le libérer avec DeleteDC a la fin du WM_PAINT. Et pour finir tu appliques un BitBlt à partir de ton MemDC sur ton hDC, ce qui aura normalement pour effet d'appliquer les pixels sur la surface client.
En espérant t'avoir aider...

___________________
MVS - Most Valuable Student ( Microsoft)
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
24 avril 2006 à 20:43
SDK propose ceci sinon :

DrawSpline(xyArray, tolerance, flags);



@+;
satellite34

http://wxcod.free.fr/forum/
0
jul41 Messages postés 14 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 1 mai 2006
24 avril 2006 à 21:20
merci pour la reponse, mais je comprends pas tres bien comment et quand on se sert de BitBlt, qu'est-ce qu'il faut lui mettre dans la parenthèse?
0
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
24 avril 2006 à 21:45
Vas voir sur MSDN : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceui40/html/cerefbitblt.asp

___________________
MVS - Most Valuable Student ( Microsoft)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jul41 Messages postés 14 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 1 mai 2006
24 avril 2006 à 21:59
j'ai changé une partie du programme en m'inspirant de différentes discussion, et ca donne ça (mais ca ne fonctionne toujours pas...):

PAINTSTRUCT paintst;
HDC hDC;
HDC hMemDC;
switch (mes)
{
case WM_PAINT:
hDC=BeginPaint(hWnd,&paintst);
hMemDC=CreateCompatibleDC(hDC);
int tab[15];
int i;
int value;
int compteur;
compteur=0;
for(i=1;i<=15;i++)
{
tab[i];
}
for(;;)
{
value=tab[compteur];
SetPixel(hMemDC,compteur,value,RGB(0,255,0)); //pixel de couleur verte
BitBlt(hDC,0,0,100,100,hMemDC,0,0,SRCCOPY);
compteur+=1;
if(compteur==15) {break;}
}
DeleteDC(hMemDC);
EndPaint(hWnd,&paintst);
return 0;

si vous voyez une erreur...
0
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
24 avril 2006 à 22:43
Il faut juste mettre le SetPïxel dans ta boucle for(;;) et ensuite avant le DeleteDC tu fais le BitBlt...

___________________
MVS - Most Valuable Student ( Microsoft)
0
jul41 Messages postés 14 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 1 mai 2006
24 avril 2006 à 22:59
mais le SetPixel est déjà dans la boucle for(;;), et si je mets le BitBlt juste avant le DeleteDC, ça ne marche tjs pas...

for(;;)
{
value=tab[compteur];
SetPixel(hMemDC,compteur,value,RGB(0,255,0)); //pixel de couleur verte
BitBlt(hDC,0,0,100,100,hMemDC,0,0,SRCCOPY);
compteur+=1;
if(compteur==15) {break;}
}
DeleteDC(hMemDC);
EndPaint(hWnd,&paintst);
return 0;
0
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
24 avril 2006 à 23:03
T'as essaye ça :

for(;;)
{
value=tab[compteur];
SetPixel(hMemDC,compteur,value,RGB(0,255,0)); //pixel de couleur verte
compteur+=1;
if(compteur==15) {break;}
}
BitBlt(hDC,0,0,100,100,hMemDC,0,0,SRCCOPY);
DeleteDC(hMemDC);
EndPaint(hWnd, &paintst);

?
___________________
MVS - Most Valuable Student ( Microsoft)
0
jul41 Messages postés 14 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 1 mai 2006
24 avril 2006 à 23:09
oui c ça que j'ai essayé, excuse moi pour le dernier message, j'ai fait bêtement un copier coller sans rien changer...
0
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
24 avril 2006 à 23:12
Ben je sais pas trop, il faudrait que quelqu'un d'autre intervienne...

___________________
MVS - Most Valuable Student ( Microsoft)
0
jul41 Messages postés 14 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 1 mai 2006
24 avril 2006 à 23:21
Ok, merci bcp pour ton aide quand même, j'ai avancé... du coup je vais me coucher. Bonne nuit!
0
Rejoignez-nous