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
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : INTERFACE RE : INTERFACE par majdeline88
Cliquez pour lire la suite par majdeline88 MESSAGE D ERREUR MESSAGE D ERREUR par majdeline88
Cliquez pour lire la suite par majdeline88
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|