Accueil > > > CLASSE GRAPH: GESTION DES GRAPHIQUES DANS LES APPLICATIONS WIN32
CLASSE GRAPH: GESTION DES GRAPHIQUES DANS LES APPLICATIONS WIN32
Information sur la source
Description
Cette classe permet de gérer très facilement l'ajout de graphique dans vos applications. Elle utilise les API win 32 pure. L'interface homme machine a été pensée pour être le plus simple intuitif et le plus simple possible. -Un clic gauche déplacé permet de déplacer la fenêtre de visualisation. -Un clic droit permet de faire un zoom optimal sur les courbes du graphique. -un clic droit déplacé permet d'adapter la fenêtre de visualisation au rectangle créer. -La molette de la souris permet de faire un zoom ou un dé zoom sur les données. -Un clic gauche sur une courbe permet de la sélectionner. La courbe sélectionnée devient la courbe courante. -Lorsque l'utilisateur appuie le bouton supprimé lorsqu'une courbe est sélectionnée, cette courbe est supprimée. -La touche Echap permet de désélectionner la courbe. -Le mouvement de la souris sur les données permet de placer le curseur sur la courbe courante et de visualiser les coordonnées. -On peut ajouter un titre et une légende.
Source
- //**************************************************************************************
- //Vincent Morard
- //Graph : Classe pour la gestion des graphiques dans une application Win32
- //23/05/2009
- //**************************************************************************************
- #include <windows.h>
- #include <math.h>
- #include "Plot.h"
- HINSTANCE hInst;
-
-
- LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- static int cx,cy;
- static Plot *P1,*P2,*P3;
- switch (message)
- {
- case WM_CREATE:
- double X[1000],Y[1000],Y2[1000],Y3[1000],Y4[1000],Y5[1000],Y6[1000],Y7[1000];
-
- Plot::Initialize(hInst);
- P1 = new Plot();
- P2 = new Plot();
- P3 = new Plot();
-
- P1->CreatePlot(0,WS_CHILD|WS_VISIBLE,20,20,100,200,hwnd);
- P2->CreatePlot(0,WS_CHILD|WS_VISIBLE|WS_DLGFRAME,300,20,50,200,hwnd);
- P3->CreatePlot(0,WS_CHILD|WS_VISIBLE,20,20,100,200,hwnd);
-
- //Couleur des graphs
- P1->SetBkColor(RGB(112,156,227));
- P1->SetGraphColor(RGB(204,219,244));
-
- P2->SetBkColor(RGB(95,195,34));
- P2->SetGraphColor(RGB(219,251,196));
-
- P3->SetBkColor(RGB(193,56,41));
- P3->SetGraphColor(RGB(251,218,196));
-
- //Création des courbes
- srand(GetTickCount());
- X[0]=0;Y[0]=0;Y2[0]=0;Y3[0]=0;Y4[0]=0,Y5[0]=0,Y6[0]=0,Y7[0]=0;
-
- for(int i=1;i<1000;i++){
- X[i]=i;
- Y[i]=Y[i-1]+(rand()%2 == 0 ? -1:1);
- Y2[i]=20*sin((double)i/20);
- Y3[i]=(i/30-2)*10;
- Y4[i]=(sin((double)i/4)*sqrt((double)i));
- Y5[i]=(sin((double)i/4)*sqrt((double)i*3));
- Y6[i]=(sin((double)i/4)*sqrt((double)i*6));
- Y7[i]=(sin((double)i/4)*sqrt((double)i*9));
- }
-
- //Ajout des courbes dans les graph
- P1->Add(X,Y,100 ,RGB(0,200,200) ,PLOT_TYPE_CROSS_AND_LINE);
-
- P2->Add(X,Y,1000 ,RGB(200,0,0) ,PLOT_TYPE_LINE);
- P2->Add(X,Y2,1000,RGB(0,200,0) ,PLOT_TYPE_CROSS_AND_LINE);
- P2->Add(X,Y3,300 ,RGB(255,128,64),PLOT_TYPE_CROSS);
-
- P3->Add(X,Y4,100 ,RGB(100,0,0) ,PLOT_TYPE_CROSS);
- P3->Add(X,Y5,100 ,RGB(200,0,0) ,PLOT_TYPE_CROSS);
- P3->Add(X,Y6,100 ,RGB(255,126,0) ,PLOT_TYPE_CROSS);
- P3->Add(X,Y7,100 ,RGB(255,189,20) ,PLOT_TYPE_CROSS);
-
-
- P1->AddTitle("Y[i-1] + (rand()%2 == 0 ? -1:1)");
-
- P3->AddTitle("Sinus pondéré avec une racine carré");
- P3->AddLegend();
- P3->AddLegend(0,"Sin{w/4} * sqrt(w)");
- P3->AddLegend(1,"Sin{w/4} * sqrt(w*3)");
- P3->AddLegend(2,"Sin{w/4} * sqrt(w*6)");
- P3->AddLegend(3,"Sin{w/4} * sqrt(w*9)");
- return 0 ;
-
-
- case WM_SIZE:
- cx = LOWORD (lParam) ;
- cy = HIWORD (lParam) ;
- MoveWindow(P1->GetHWND(),20,20,cx/2-20,cy/2-20,TRUE);
- MoveWindow(P2->GetHWND(),cx/2+20,20,cx/2-40,cy/2-20,TRUE);
- MoveWindow(P3->GetHWND(),20,cy/2+20,cx-40,cy/2-20,TRUE);
- break;
-
- case WM_DESTROY:
- PostQuitMessage (0) ;
- return 0 ;
- }
- return DefWindowProc (hwnd, message, wParam, lParam) ;
- }
-
-
- int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE ,PSTR szCmdLine, int iCmdShow)
- {
- static char szAppName[] = "Graph" ;
- HWND hwnd ;
- MSG msg ;
- WNDCLASS wndclass ;
-
- hInst = hInstance;
-
- wndclass.style = CS_HREDRAW | CS_VREDRAW ;
- wndclass.lpfnWndProc = WndProc ;
- wndclass.cbClsExtra = 0 ;
- wndclass.cbWndExtra = 0 ;
- wndclass.hInstance = hInstance ;
- wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
- wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
- wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
- wndclass.lpszMenuName = NULL ;
- wndclass.lpszClassName = szAppName ;
-
- if (!RegisterClass (&wndclass)){
- MessageBox (NULL, "This program requires Windows NT!",szAppName, MB_ICONERROR) ;
- return 0 ;
- }
-
- hwnd = CreateWindow (szAppName, "Graphiques",
- WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
- CW_USEDEFAULT, CW_USEDEFAULT,
- CW_USEDEFAULT, CW_USEDEFAULT,
- NULL, NULL, hInstance, NULL) ;
-
- ShowWindow (hwnd, iCmdShow) ;
- UpdateWindow (hwnd) ;
-
- while (GetMessage (&msg, NULL, 0, 0))
- {
- TranslateMessage (&msg) ;
- DispatchMessage (&msg) ;
- }
- return msg.wParam ;
- }
//**************************************************************************************
//Vincent Morard
//Graph : Classe pour la gestion des graphiques dans une application Win32
//23/05/2009
//**************************************************************************************
#include <windows.h>
#include <math.h>
#include "Plot.h"
HINSTANCE hInst;
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cx,cy;
static Plot *P1,*P2,*P3;
switch (message)
{
case WM_CREATE:
double X[1000],Y[1000],Y2[1000],Y3[1000],Y4[1000],Y5[1000],Y6[1000],Y7[1000];
Plot::Initialize(hInst);
P1 = new Plot();
P2 = new Plot();
P3 = new Plot();
P1->CreatePlot(0,WS_CHILD|WS_VISIBLE,20,20,100,200,hwnd);
P2->CreatePlot(0,WS_CHILD|WS_VISIBLE|WS_DLGFRAME,300,20,50,200,hwnd);
P3->CreatePlot(0,WS_CHILD|WS_VISIBLE,20,20,100,200,hwnd);
//Couleur des graphs
P1->SetBkColor(RGB(112,156,227));
P1->SetGraphColor(RGB(204,219,244));
P2->SetBkColor(RGB(95,195,34));
P2->SetGraphColor(RGB(219,251,196));
P3->SetBkColor(RGB(193,56,41));
P3->SetGraphColor(RGB(251,218,196));
//Création des courbes
srand(GetTickCount());
X[0]=0;Y[0]=0;Y2[0]=0;Y3[0]=0;Y4[0]=0,Y5[0]=0,Y6[0]=0,Y7[0]=0;
for(int i=1;i<1000;i++){
X[i]=i;
Y[i]=Y[i-1]+(rand()%2 == 0 ? -1:1);
Y2[i]=20*sin((double)i/20);
Y3[i]=(i/30-2)*10;
Y4[i]=(sin((double)i/4)*sqrt((double)i));
Y5[i]=(sin((double)i/4)*sqrt((double)i*3));
Y6[i]=(sin((double)i/4)*sqrt((double)i*6));
Y7[i]=(sin((double)i/4)*sqrt((double)i*9));
}
//Ajout des courbes dans les graph
P1->Add(X,Y,100 ,RGB(0,200,200) ,PLOT_TYPE_CROSS_AND_LINE);
P2->Add(X,Y,1000 ,RGB(200,0,0) ,PLOT_TYPE_LINE);
P2->Add(X,Y2,1000,RGB(0,200,0) ,PLOT_TYPE_CROSS_AND_LINE);
P2->Add(X,Y3,300 ,RGB(255,128,64),PLOT_TYPE_CROSS);
P3->Add(X,Y4,100 ,RGB(100,0,0) ,PLOT_TYPE_CROSS);
P3->Add(X,Y5,100 ,RGB(200,0,0) ,PLOT_TYPE_CROSS);
P3->Add(X,Y6,100 ,RGB(255,126,0) ,PLOT_TYPE_CROSS);
P3->Add(X,Y7,100 ,RGB(255,189,20) ,PLOT_TYPE_CROSS);
P1->AddTitle("Y[i-1] + (rand()%2 == 0 ? -1:1)");
P3->AddTitle("Sinus pondéré avec une racine carré");
P3->AddLegend();
P3->AddLegend(0,"Sin{w/4} * sqrt(w)");
P3->AddLegend(1,"Sin{w/4} * sqrt(w*3)");
P3->AddLegend(2,"Sin{w/4} * sqrt(w*6)");
P3->AddLegend(3,"Sin{w/4} * sqrt(w*9)");
return 0 ;
case WM_SIZE:
cx = LOWORD (lParam) ;
cy = HIWORD (lParam) ;
MoveWindow(P1->GetHWND(),20,20,cx/2-20,cy/2-20,TRUE);
MoveWindow(P2->GetHWND(),cx/2+20,20,cx/2-40,cy/2-20,TRUE);
MoveWindow(P3->GetHWND(),20,cy/2+20,cx-40,cy/2-20,TRUE);
break;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE ,PSTR szCmdLine, int iCmdShow)
{
static char szAppName[] = "Graph" ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
hInst = hInstance;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass)){
MessageBox (NULL, "This program requires Windows NT!",szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, "Graphiques",
WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
Conclusion
L'exe est à renommer de Graph.ex en Graph.exe
Fichier Zip
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Interface graphique [ par Oumbre ]
Salut à tous !Voilà mon problème : j'ai un programme qui est écrit en C pour windows et je dois créer une interface graphique qui va avec. De plus, ce
Interface graphique style Windows [ par eliot5 ]
Je viens de créer sous windev un petit logiciel qui fonctionne bien mais j'aimerais connaitre la manière de procéder pour créer une interface graphiqu
Tracer graphique en fonction d'un tableau [ par Bobbix ]
Bonjour,Dans le cadre d'un projet, j'ai besoin de votre aide sur le graphisme en WIN32. Nous avons réalisé une carte électronique d'un oscilloscope qu
Compatibilité allegro-windows : les fonctions le l'API win32 [ par programmateur ]
(Je reposte ce message à cause de problemes de connexion au cite qui m'empechent de repondre a la discution)Salut,Je poste simplement ce message pour
Pb de compilation C++ pour Windows [ par valoue ]
Bonjour,Je developpe actuellement un appli qui doit tourner sous Windows et etre protable sous Linux.J'utilise donc dans mon prog C++ (sous VC++ .net)
Win32 et les fichiers [ par platon179 ]
Bonjour, j'ai un petit souci pour lire les fichiers texte sous windowsComment faut-il faire pour lire une seule ligne complète d'un fichier texte, un
Prog sous Longhorn [ par LaPatoshe ]
Salut à tous. J'envoie ce eptit sujet pour savoir comment va se programmer Windows à l'Avenir vu que Win32 va apparement disparaitre e
MFC & API windows [ par 69lion69 ]
Salut à tous, alors voila g deux applications une sous MFC (client a base de socket) et une deuxième en programmation windows (permet de trc
Editeur de map->interface graphique [ par dletozeun ]
Bonjour,Je voudrais faire une interface grphique windows pour un editeur de map.Cet edtiteur serait composé de plusieurs fenetres OpenGL avec aut
Allegro&Win32 [ par Darksheep ]
Bonjour ^^ Comme je l'expliquais dans le précédent post, j'aimerais créer un éditeur de map genre rpg maker à l'aide d'allegr
|
Derniers Blogs
[TECHDAYS2012] OUI J'Y SERAI![TECHDAYS2012] OUI J'Y SERAI! par JeremyJeanson
Bonsoir, Certes, je l'annonce avec un peu de retard, mais je serai effectivement au Techdays demain. Comme l'an dernier, je participerai au programme ATE (Ask The Expert). Si vous avez des questions Workflow, WCF, AppFabric ou plus généralement .net, n'hé...
Cliquez pour lire la suite de l'article par JeremyJeanson TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks
Forum
RE : ARBRE BINAIRERE : ARBRE BINAIRE par pacotheking
Cliquez pour lire la suite par pacotheking
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|