|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
CALCULER SES MOYENNES
Information sur la source
Description
Mon premier programme en C, entièrement recodé. Il n'est pas vraiment révolutionnaire mais permet de calculer simplement ses moyennes (donc destiné aux étudiants) selon certains paramètres, et d'afficher les résultats dans un graphe.
On peut maintenant choisir ses propres coefficients (de 1 à 99), sauvegarder les notes, charger des tableaux de notes, on peut également afficher la médiane et l'étendue des notes. L'application permet aussi de faire un screenshot de la fenêtre (cette fonction n'est pas de moi, je l'ai trouvée ici). J'ai également rajouté une fenêtre qui affiche les coefficients pour le BAC des 3 principales filières (L, S, SES) ainsi que leurs spécialités. Pourquoi ? Cela m'a permis de gérer une TreeView.
(J'ai utilisé win32 donc le programme tourne uniquement sous Windows)
Développé sous Codes::Blocks (final: 74ko).
Source
- #include <windows.h>
- #include <string.h>
- #include <stdio.h>
- #include <math.h>
- #include <richedit.h>
- #include <commctrl.h>
- #include "define.h"
-
- //Variables globales et prototypes
- HINSTANCE hinst;
- void Refresh();
- void Draw(BOOL calcul);
- int __stdcall HwndToBmpFile(HWND hwnd,char *pszflname);
- LRESULT CALLBACK MainWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
- BOOL APIENTRY Dialog1Proc1(HWND,UINT,WPARAM,LPARAM);
- BOOL APIENTRY Dialog1Proc2(HWND,UINT,WPARAM,LPARAM);
- BOOL APIENTRY ProcCoefficients(HWND,UINT,WPARAM,LPARAM);
- static HBRUSH ColorStatic(HWND,WPARAM,LPARAM);
- int nbritem=0;
- char nbritem2[100];
- float afficheMoy=0;
- int calcul=1;
- int popup=0;
- HANDLE fo,fp;
- CHAR szFile[MAX_PATH]={0};
- HWND hwnd,texte,ok,edit,annuler,recommencer,texte_background,list,combo,background,box,box2,goback,enregistrer,imprimer,
- check,coeff05,coeff1,coeff2,coeffautre,coeff,note,about,charger,coeffBAC,hTTip;
- //Déclaration de la fenêtre
- int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {
- //Variables
- MSG msg;
- hinst=hinstance;
- //Paramètres de la fenêtre
- WNDCLASS wc;
- wc.style=0;
- wc.lpfnWndProc=MainWndProc;
- wc.cbClsExtra=0;
- wc.cbWndExtra=0;
- wc.hInstance=hinstance;
- wc.hIcon=LoadIcon(hinstance,MAKEINTRESOURCE(1));
- wc.hCursor=LoadCursor(NULL,IDC_ARROW);
- wc.hbrBackground=(HBRUSH)(COLOR_3DFACE+1);
- wc.lpszMenuName= NULL;
- wc.lpszClassName="MaWinClass";
- if(!RegisterClass(&wc)) return FALSE;
- //Création de la fenêtre
- int cxS=GetSystemMetrics(SM_CXSCREEN);
- int cyS=GetSystemMetrics(SM_CYSCREEN);
- hwnd=CreateWindowEx(WS_EX_WINDOWEDGE,"MaWinClass","Aucune valeur",WS_CAPTION|WS_MINIMIZEBOX|WS_SYSMENU,(cxS-700)/2,(cyS-275)/2,320,275,HWND_DESKTOP,NULL,hinstance,NULL);
- //Mise en place des contrôles
- box=CreateWindowEx(0,"BUTTON","Aucune valeur",SS_LEFT|WS_CHILD|WS_VISIBLE|BS_GROUPBOX,10,10,280,225,hwnd,(HMENU)ID_BOX,hinstance,NULL);
- SendMessage(box,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- box2=CreateWindowEx(0,"BUTTON","Propriétés :",SS_LEFT|WS_CHILD|WS_VISIBLE|BS_GROUPBOX,90,242,200,58,hwnd,(HMENU)ID_BOX2,hinstance,NULL);
- SendMessage(box2,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- edit=CreateWindowEx(WS_EX_STATICEDGE|WS_EX_CLIENTEDGE,"EDIT","12.5",WS_CHILD|WS_VISIBLE|WS_EX_CLIENTEDGE|WS_EX_STATICEDGE,110,40,55,20,hwnd,(HMENU)ID_EDIT,hinstance,NULL);
- SendMessage(edit,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- texte_background=CreateWindowEx(WS_EX_STATICEDGE,"STATIC","",SS_LEFT|WS_CHILD|WS_VISIBLE,110,150,170,74,hwnd,(HMENU)ID_TEXTE_BACKGROUND,hinstance,NULL);
- SendMessage(texte_background,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- texte=CreateWindowEx(0,"STATIC","Astuce : Pensez à ramener vos notes sur 20 afin que les coefficients (s'ils sont activés) soient proportionnels.",WS_CHILD|WS_VISIBLE,120,160,150,60,hwnd,(HMENU)ID_TEXTE,hinstance,NULL);
- SendMessage(texte,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- ok=CreateWindowEx(0,"BUTTON","OK",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,170,40,30,20,hwnd,(HMENU)ID_OK,hinstance,NULL);
- SendMessage(ok,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- annuler=CreateWindowEx(0,"BUTTON","Annuler",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE|WS_DISABLED,110,70,90,20,hwnd,(HMENU)ID_ANNULER,hinstance,NULL);
- SendMessage(annuler,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- recommencer=CreateWindowEx(0,"BUTTON","Recommencer",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE|WS_DISABLED,110,90,90,20,hwnd,(HMENU)ID_RECOMMENCER,hinstance,NULL);
- SendMessage(recommencer,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- list=CreateWindowEx(WS_EX_STATICEDGE,"LISTBOX",NULL,WS_CHILD|WS_VISIBLE|WS_VSCROLL,20,40,80,200,hwnd,(HMENU)ID_LIST,hinstance,NULL);
- SendMessage(list,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- combo=CreateWindowEx(0,"COMBOBOX",NULL,WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST,110,120,170,0,hwnd,(HMENU)ID_COMBO,hinstance,NULL);
- SendMessage(combo,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- goback=CreateWindowEx(WS_EX_STATICEDGE,"BUTTON",">",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,295,35,15,40,hwnd,(HMENU)ID_GOBACK,hinstance,NULL);
- SendMessage(goback,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- enregistrer=CreateWindowEx(0,"BUTTON","Enregistrer",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,95,255,90,20,hwnd,(HMENU)ID_ENREGISTRER,hinstance,NULL);
- SendMessage(enregistrer,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- imprimer=CreateWindowEx(0,"BUTTON","Impression Ecran",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,195,255,90,20,hwnd,(HMENU)ID_IMPRIMER,hinstance,NULL);
- SendMessage(imprimer,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- charger=CreateWindowEx(0,"BUTTON","Charger...",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,95,275,90,20,hwnd,(HMENU)ID_CHARGER,hinstance,NULL);
- SendMessage(charger,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- check=CreateWindowEx(0,"BUTTON","Afficher la grille",WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,195,275,89,20,hwnd,(HMENU)ID_CHECK,hinstance,NULL);
- SendMessage(check,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- background=CreateWindowEx(WS_EX_STATICEDGE,"STATIC",NULL,SS_LEFT|WS_CHILD|WS_VISIBLE,205,40,75,70,hwnd,(HMENU)ID_BACKGROUND,hinstance,NULL);
- SendMessage(background,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- coeff05=CreateWindowEx(0,"BUTTON","0.5",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,210,44,69,17,hwnd,(HMENU)ID_COEFF05,hinstance,NULL);
- SendMessage(coeff05,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- coeff1=CreateWindowEx(0,"BUTTON","1",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,210,59,69,17,hwnd,(HMENU)ID_COEFF1,hinstance,NULL);
- SendMessage(coeff1,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- coeff2=CreateWindowEx(0,"BUTTON","2",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,210,74,69,17,hwnd,(HMENU)ID_COEFF2,hinstance,NULL);
- SendMessage(coeff2,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- coeffautre=CreateWindowEx(0,"BUTTON","autre...",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,210,89,69,17,hwnd,(HMENU)ID_COEFFAUTRE,hinstance,NULL);
- SendMessage(coeffautre,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- note=CreateWindowEx(0,"STATIC","Note :",WS_CHILD|WS_VISIBLE,110,25,50,14,hwnd,(HMENU)ID_NOTE,hinstance,NULL);
- SendMessage(note,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- coeff=CreateWindowEx(0,"STATIC","Coefficient :",WS_CHILD|WS_VISIBLE,205,25,60,14,hwnd,(HMENU)ID_COEFF,hinstance,NULL);
- SendMessage(coeff,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- note=CreateWindowEx(0,"STATIC","Note (coefficient)",WS_CHILD|WS_VISIBLE,20,25,90,14,hwnd,(HMENU)ID_EXEMPLE,hinstance,NULL);
- SendMessage(note,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- about=CreateWindowEx(WS_EX_STATICEDGE,"BUTTON","A propos...",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,10,274,70,22,hwnd,(HMENU)ID_ABOUT,hinstance,NULL);
- SendMessage(about,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- coeffBAC=CreateWindowEx(0,"BUTTON","Coeffs BAC",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,10,255,70,20,hwnd,(HMENU)ID_BAC,hinstance,NULL);
- SendMessage(coeffBAC,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
- SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Moyenne (avec coefficients)");
- SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Moyenne (sans coefficients)");
- SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Nombre de notes >= 10");
- SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Nombre de notes < 10");
- SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Etendue (différence max - min)");
- SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Médiane (avec coefficients)");
- SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Médiane (sans coefficients)");
- SendMessage(combo,CB_SELECTSTRING,0,(LPARAM)"Moyenne (avec coefficients)");
- CheckDlgButton(hwnd,ID_COEFF1,BST_CHECKED);
- //Création des Tooltips
- TOOLINFO ti;
- RECT rect;
- hTTip=CreateWindow(TOOLTIPS_CLASS,NULL,WS_POPUP|TTS_NOPREFIX,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hwnd,NULL,hinstance,NULL);
- GetClientRect(hwnd,&rect);
- ti.cbSize=sizeof(TOOLINFO);
- ti.uFlags=TTF_SUBCLASS;
- GetClientRect(hwnd,&rect);
- for(int a=1;a <= 137;a++) {
- ti.hwnd=GetDlgItem(hwnd,a);
- ti.uId=0;
- if (a == ID_OK)
- ti.lpszText="Ajouter la note à la liste";
- else if (a == ID_ANNULER)
- ti.lpszText="Annuler la dernière note";
- else if (a == ID_RECOMMENCER)
- ti.lpszText="SUpprimer toutes les notes";
- else if (a == ID_LIST)
- ti.lpszText="Liste des notes";
- else if (a == ID_EDIT)
- ti.lpszText="Tapez vos notes ici";
- else if (a == ID_COMBO)
- ti.lpszText="Interractions sur les notes";
- else if (a == ID_GOBACK)
- ti.lpszText="Afficher/cacher le graphe";
- else if (a == ID_ENREGISTRER)
- ti.lpszText="Enregistrer le tableau de notes actuel";
- else if (a == ID_IMPRIMER)
- ti.lpszText="Faire une 'impression-écran' de cette fenêtre (permet de sauvegarder le graphe)";
- else if (a == ID_CHECK)
- ti.lpszText="Afficher/cacher la grille sur le graphe";
- else if (a == ID_COEFFAUTRE)
- ti.lpszText="Choisir son propre coefficient (entre 1 et 99)";
- else if (a == ID_ABOUT)
- ti.lpszText="Afficher l'auteur du logiciel";
- else if (a == ID_CHARGER)
- ti.lpszText="Charger un tableau de notes";
- ti.rect.left=rect.left;
- ti.rect.top=rect.top;
- ti.rect.right=rect.right;
- ti.rect.bottom=rect.bottom;
- SendMessage(hTTip,TTM_ADDTOOL,0,(LPARAM)&ti);
- }
- SetFocus(edit);
-
- if (!hwnd) return FALSE;
- ShowWindow(hwnd,nCmdShow);
- while (GetMessage(&msg,NULL,0,0)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return msg.wParam;
- }
- //Traitement des messages Client-Machine
- LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- switch (uMsg) {
- case WM_CONTEXTMENU:
- HMENU hmenu,hpopup;
- hmenu=LoadMenu(hinst,"LEMENU");
- hpopup=GetSubMenu(hmenu,0);
- TrackPopupMenuEx(hpopup,0,LOWORD(lParam),HIWORD(lParam),hwnd,NULL);
- DestroyMenu(hmenu);
- break;
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case 111:
- DialogBox(hinst,"Coefficients",hwnd,(DLGPROC)ProcCoefficients);
- break;
- case 112:
- DestroyWindow(hwnd);
- break;
- case ID_BAC:
- DialogBox(hinst,"Coefficients",hwnd,(DLGPROC)ProcCoefficients);
- break;
- case ID_COEFFAUTRE:
- DialogBox(hinst,"DIALOG1",hwnd,(DLGPROC)Dialog1Proc1);
- break;
- case ID_GOBACK:
- RECT area;
- GetWindowRect(hwnd,&area);
- int width=area.right-area.left;
- if (width == 320) {
- SetWindowPos(hwnd,0,area.left,area.top,800,350,0);
- SetWindowText(goback,"<");
- }
- else {
- SetWindowPos(hwnd,0,area.left,area.top,320,275,0);
- SetWindowText(goback,">");
- }
- break;
- case ID_COMBO:
- nbritem=SendMessage(list,LB_GETCOUNT,0,0);
- if (nbritem > 0) Refresh();
- break;
- case ID_ANNULER:
- nbritem=SendMessage(list,LB_GETCOUNT,0,0)-1;
- SendMessage(list,LB_DELETESTRING,nbritem,0);
- Refresh();
- break;
- case ID_RECOMMENCER:
- if (MessageBox(hwnd,"Etes-vous sûr(e) de vouloir annuler tous les calculs en cours ?\t\n",
- "Avertissement",MB_ICONQUESTION|MB_OKCANCEL) == IDOK) {
- while (SendMessage(list,LB_GETCOUNT,0,0)*2)
- SendMessage(list,LB_DELETESTRING,0,0);
- SetWindowText(edit,"");
- SendMessage(combo,CB_SELECTSTRING,0,(LPARAM)"Moyenne (avec coefficients)");
- CheckDlgButton(hwnd,ID_COEFF05,BST_UNCHECKED);
- CheckDlgButton(hwnd,ID_COEFF2,BST_UNCHECKED);
- CheckDlgButton(hwnd,ID_COEFFAUTRE,BST_UNCHECKED);
- CheckDlgButton(hwnd,ID_COEFF1,BST_CHECKED);
- SetWindowText(coeffautre,"autre...");
- EnableWindow(recommencer,FALSE);
- Refresh();
- }
- break;
- case ID_CHECK:
- Refresh();
- InvalidateRect(hwnd,NULL,FALSE);
- UpdateWindow(hwnd);
- break;
- case ID_OK:
- {
- char text[10];
- GetWindowText(edit,text,10);
- int text2=atoi(text);
- for(int a=1;a <= 20;a++) {
- if (text2 == a) {
- int b=7;
- while (b<=10) {
- if (IsDlgButtonChecked(hwnd,b)) {
- char textcoeff[5];
- double verif=1.5;
- GetWindowText(GetDlgItem(hwnd,b),textcoeff,10);
- if (strchr(textcoeff,'a') != NULL) {
- sscanf(textcoeff,"autre: %lf",&verif);
- sprintf(textcoeff,"%lf",verif);
- }
- char par[10]="";
- sprintf(par,"%s (%s)",text,textcoeff);
- SendMessage(list,LB_ADDSTRING,0,(LPARAM)par);
- EnableWindow(annuler,TRUE);
- EnableWindow(recommencer,TRUE);
- Refresh();
- break;
- }
- b++;
- }
- }
- }
- break;
- }
- case ID_CHARGER:
- while (SendMessage(list,LB_GETCOUNT,0,0)*2)
- SendMessage(list,LB_DELETESTRING,0,0);
- SetWindowText(edit,"");
- SendMessage(combo,CB_SELECTSTRING,0,(LPARAM)"Moyenne (avec coefficients)");
- CheckDlgButton(hwnd,ID_COEFF05,BST_UNCHECKED);
- CheckDlgButton(hwnd,ID_COEFF2,BST_UNCHECKED);
- CheckDlgButton(hwnd,ID_COEFFAUTRE,BST_UNCHECKED);
- CheckDlgButton(hwnd,ID_COEFF1,BST_CHECKED);
- SetWindowText(coeffautre,"autre...");
- EnableWindow(recommencer,FALSE);
- OPENFILENAME ofn;
- ZeroMemory(&ofn,sizeof(OPENFILENAME));
- ofn.lStructSize=sizeof(OPENFILENAME);
- ofn.hwndOwner=hwnd;
- ofn.lpstrFile=szFile;
- ofn.nMaxFile=MAX_PATH;
- ofn.lpstrFilter="Fichier Moyenne (*.moy)\0*.moy\0";
- ofn.nFilterIndex=1;
- ofn.lpstrTitle="Ouvrir un fichier Moyenne...";
- ofn.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
- if (GetOpenFileName(&ofn) == TRUE) {
- DWORD lenbloc,s;
- char *tampon;
- fo=CreateFile(szFile,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
- lenbloc=GetFileSize(fo,NULL);
- tampon=(PCHAR)LocalAlloc(LMEM_FIXED,lenbloc+1);
- ReadFile(fo,tampon,lenbloc,&s,NULL);
- tampon[lenbloc]=0;
- int i=0,p=0;
- for(i=0;tampon[i] != '\0';i++) {
- if (tampon[i] == '\r') {
- for(p=i;tampon[p]!= '\0';p++)
- tampon[p]=tampon[p+1];
- }
- }
- char* token=strtok(tampon,"\n");
- while (token != NULL) {
- SendMessage(list,LB_ADDSTRING,0,(LPARAM)token);
- token=strtok(NULL,"\n");
- }
- LocalFree(tampon);
- CloseHandle(fo);
- Refresh();
- }
- break;
- case ID_ENREGISTRER:
- DialogBox(hinst,"DIALOG2",hwnd,(DLGPROC)Dialog1Proc2);
- break;
- case ID_IMPRIMER:
- if (HwndToBmpFile(hwnd,"Moyennes/Graphique.bmp")) {
- PostMessage(hwnd,WM_NEXTDLGCTL,0,0);
- if (MessageBox(hwnd,"L'impression écran s'est effectuée avec succès !\t\n"
- "L'image a été enregistrée dans le dossier /Moyennes/\t\n"
- "sous le nom de 'Graphique.bmp'.\t\n\n"
- "Souhaitez-vous ouvrire l'image maintenant ?\t\n",
- "Information",MB_ICONINFORMATION|MB_OKCANCEL) != IDCANCEL)
- ShellExecute(hwnd,"open","Graphique.bmp",NULL,"Moyennes",SW_SHOW);
- }
- else
- MessageBox(hwnd,"Veuillez recommencer.","Erreur",MB_OK);
- break;
- case ID_ABOUT:
- MessageBox(hwnd,"- Moyennes -\nLogiciel pour calculer ses moyennes\t\n(copyrights © WINKEL Vincent)\t\n",
- "A propos...",MB_OK|MB_ICONASTERISK);
- break;
- }
- case WM_PAINT:
- Draw(calcul);
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
- default:
- return DefWindowProc(hwnd,uMsg,wParam,lParam);
- }
- }
- //Aliases de raccourci (traitement du graphique)
- void Refresh() {
- nbritem=SendMessage(list,LB_GETCOUNT,0,0);
- if (nbritem > 0) {
- char textitem[100];
- GetWindowText(combo,textitem,100);
- char item1[]="Moyenne (avec coefficients)";
- char item2[]="Moyenne (sans coefficients)";
- char item3[]="Nombre de notes >= 10";
- char item4[]="Nombre de notes < 10";
- char item5[]="Etendue (différence max - min)";
- char item6[]="Médiane (avec coefficients)";
- char item7[]="Médiane (sans coefficients)";
- int a=0;
- double nbr=0,nbr2=0,note=0,coeff=0;
- char text[20],texttitle[200];
- if (strcmp(textitem,item1) == 0) {
- for(a=0;a < nbritem;a++) {
- SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
- sscanf(text,"%lf (%lf)",¬e,&coeff);
- nbr+=note*coeff;
- nbr2+=coeff;
- }
- afficheMoy=nbr/nbr2;
- sprintf(texttitle,"Moyenne (avec coefficients): %.2f",afficheMoy);
- SetWindowText(box,texttitle);
- SetWindowText(hwnd,texttitle);
- calcul=1;
- }
- else if (strcmp(textitem,item2) == 0) {
- for(a=0;a < nbritem;a++) {
- SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
- sscanf(text,"%lf (%lf)",¬e,&coeff);
- nbr+=note;
- }
- afficheMoy=nbr/nbritem;
- sprintf(texttitle,"Moyenne (sans coefficients): %.2f",afficheMoy);
- SetWindowText(box,texttitle);
- SetWindowText(hwnd,texttitle);
- calcul=1;
- }
- if (strcmp(textitem,item3) == 0) {
- for(a=0;a < nbritem;a++) {
- SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
- sscanf(text,"%lf (%lf)",¬e,&coeff);
- if (note >= 10) nbr++;
- nbr2++;
- }
- coeff=(nbr*100)/nbr2;
- sprintf(texttitle,"Notes >= 10: %.0f/%.0f (%.1f %%)",nbr,nbr2,coeff);
- SetWindowText(box,texttitle);
- SetWindowText(hwnd,texttitle);
- calcul=0;
- }
- else if (strcmp(textitem,item4) == 0) {
- for(a=0;a < nbritem;a++) {
- SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
- sscanf(text,"%lf (%lf)",¬e,&coeff);
- if (note < 10) nbr++;
- nbr2++;
- }
- coeff=(nbr*100)/nbr2;
- sprintf(texttitle,"Notes < 10: %.0f/%.0f (%.1f %%)",nbr,nbr2,coeff);
- SetWindowText(box,texttitle);
- SetWindowText(hwnd,texttitle);
- calcul=0;
- }
- else if (strcmp(textitem,item5) == 0) {
- if (nbritem < 2) {
- SetWindowText(box,"2 valeurs minimum sont requises");
- SetWindowText(hwnd,"2 valeurs minimum sont requises");
- }
- else {
- nbr=0,nbr2=20;
- for(a=0; a < nbritem;a++) {
- SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
- sscanf(text,"%lf (%lf)",¬e,&coeff);
- if (note > nbr) nbr=note;
- else if (note < nbr2) nbr2=note;
- }
- nbr-=nbr2;
- sprintf(texttitle,"Etendue des notes: %.2f",nbr);
- SetWindowText(box,texttitle);
- SetWindowText(hwnd,texttitle);
- calcul=0;
- }
- }
- else if (strcmp(textitem,item6) == 0) {
- for(a=0;a < nbritem;a++) {
- SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
- sscanf(text,"%lf (%lf)",¬e,&coeff);
- nbr+=coeff;
- }
- nbr/=2;
- SendMessage(list,LB_GETTEXT,nbr,(LPARAM)text);
- sscanf(text,"%lf (%lf)",¬e,&coeff);
- sprintf(texttitle,"Médiane (avec coefficients): %.2f",note);
- SetWindowText(box,texttitle);
- SetWindowText(hwnd,texttitle);
- calcul=0;
- }
- else if (strcmp(textitem,item7) == 0) {
- }
- }
- else {
- SetWindowText(box,"Aucune valeur");
- SetWindowText(hwnd,"Aucune valeur");
- }
- Draw(calcul);
- InvalidateRect(hwnd,NULL,FALSE);
- UpdateWindow(hwnd);
- }
- void Draw(BOOL calcul) {
- PAINTSTRUCT ps;
- HDC hdc=BeginPaint(hwnd,&ps);
- HPEN hp2px,hpOld;
- HBRUSH brush;
- HFONT NewFont,OldFont;
- LOGFONT lf;
- ZeroMemory(&lf,sizeof(LOGFONT));
- lstrcpy(lf.lfFaceName,"Arial");
- lf.lfHeight=12;
- NewFont=CreateFontIndirect(&lf);
- OldFont=(HFONT)SelectObject(hdc,NewFont);
- //Initialisation du graphique
- /*if (calcul == FALSE) {
- brush=CreateSolidBrush(RGB(220,220,220));
- hpOld=(HPEN)SelectObject(hdc,brush);
- }*/
- Rectangle(hdc,330,10,780,300);
- MoveToEx(hdc,360,20,NULL);
- LineTo(hdc,360,270);
- MoveToEx(hdc,350,260,NULL);
- LineTo(hdc,745,260);
- //Ajout des graduations
- int a=20,b=360,d=20;
- char c[3];
- for(a=20;a <= 250;a+=12) {
- sprintf(c,"%d",d);
- MoveToEx(hdc,358,a,NULL);
- LineTo(hdc,360,a);
- int l=strlen(c);
- if (l == 2) TextOut(hdc,345,a-5,c,lstrlen(c));
- else TextOut(hdc,350,a-5,c,lstrlen(c));
- d--;
- }
- for(b=360;b <= 750;b+=12) {
- MoveToEx(hdc,b,261,NULL);
- LineTo(hdc,b,263);
- }
- //Ajout de texte
- sprintf(nbritem2,"%d",nbritem);
- char e[]="Total des notes: ";
- char e2[]=" / 32";
- strcat(e,nbritem2);
- strcat(e,e2);
- lf.lfHeight=15;
- NewFont=CreateFontIndirect(&lf);
- OldFont=(HFONT)SelectObject(hdc,NewFont);
- TextOut(hdc,480,275,e,lstrlen(e));
- //Traçage du graphique
- hp2px=CreatePen(PS_SOLID,1,RGB(150,150,250));
- hpOld=(HPEN)SelectObject(hdc,hp2px);
- a=0,b=362;
- char text[20];
- for(a=0;a <= nbritem-1;a++) {
- if (a > 31) break;
- SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
- float nbr=atof(text);
- SelectObject(hdc,GetStockObject(LTGRAY_BRUSH));
- Rectangle(hdc,b,ceil(260-12*nbr),b+9,260);
- b+=12;
- }
- //Affichage (ou non) de la grille
- if (IsDlgButtonChecked(hwnd,ID_CHECK)) {
- hp2px=CreatePen(PS_SOLID,1,RGB(200,200,200));
- hpOld=(HPEN)SelectObject(hdc,hp2px);
- int a=20,b=372;
- for(a=20;a<=250;a+=12) {
- MoveToEx(hdc,361,a,NULL);
- LineTo(hdc,745,a);
- }
- for(b=372;b<=750;b+=12) {
- MoveToEx(hdc,b,20,NULL);
- LineTo(hdc,b,260);
- }
- }
- //Affichage de la moyenne
- if (nbritem > 0) {
- hp2px=CreatePen(PS_SOLID,1,RGB(50,150,170));
- hpOld=(HPEN)SelectObject(hdc,hp2px);
- float nbr=260-12*afficheMoy;
- MoveToEx(hdc,360,nbr,NULL);
- LineTo(hdc,745,nbr);
- lf.lfHeight=13;
- NewFont=CreateFontIndirect(&lf);
- OldFont=(HFONT)SelectObject(hdc,NewFont);
- TextOut(hdc,700,nbr-13,"Moyenne",7);
- }
- //Annonce de l'état du traitement du graphique
- if (calcul == FALSE) {
- hp2px=CreatePen(PS_SOLID,1,RGB(100,100,100));
- hpOld=(HPEN)SelectObject(hdc,hp2px);
- lf.lfHeight=40;
- NewFont=CreateFontIndirect(&lf);
- OldFont=(HFONT)SelectObject(hdc,NewFont);
- BeginPath(hdc);
- TextOut(hdc,400,100," Graphique non-traité ",22);
- EndPath(hdc);
- StrokePath(hdc);
- }
- DeleteObject(NewFont);
- EndPaint(hwnd,&ps);
- }
- //Autre choix d'un coefficiant
- BOOL APIENTRY Dialog1Proc1(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) {
- switch (uMsg) {
- case WM_COMMAND:
- if (LOWORD(wParam) == 2) {
- CheckDlgButton(hwnd,ID_COEFF1,BST_CHECKED);
- CheckDlgButton(hwnd,ID_COEFFAUTRE,BST_UNCHECKED);
- EndDialog(hDlg,0);
- }
- else if (LOWORD(wParam) == 1) {
- char textedit[100]="";
- GetDlgItemText(hDlg,3,textedit,100);
- int verif=atoi(textedit);
- if (verif <= 0 || verif > 99) {
- MessageBox(hwnd,"Le coefficient doit être un nombre.\t\n"
- " (compris entre 1 et 99)\t\n","Erreur de syntaxe",MB_OK|MB_ICONERROR);
- SetFocus(GetDlgItem(hDlg,3));
- }
- else {
- char textedit2[]="autre: ";
- strcat(textedit2,textedit);
- SetWindowText(coeffautre,textedit2);
- EndDialog(hDlg,0);
- return TRUE;
- }
- return FALSE;
- }
- break;
- default:
- return FALSE;
- }
- }
- //Demande de nom de fichier
- BOOL APIENTRY Dialog1Proc2(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) {
- switch (uMsg) {
- case WM_COMMAND:
- if (LOWORD(wParam) == 2)
- EndDialog(hDlg,0);
- else if (LOWORD(wParam) == 1) {
- //Vérification de l'existence du dossier /Moyennes/
- HANDLE hDir=CreateFile("Moyennes",FILE_LIST_DIRECTORY,FILE_SHARE_READ|FILE_SHARE_DELETE,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);
- if (hDir == INVALID_HANDLE_VALUE)
- CreateDirectory("Moyennes",NULL);
- else
- CloseHandle(hDir);
- //Procédure
- int a=0,lenbloc=0,total=0;
- total=SendMessage(list,LB_GETCOUNT,0,0);
- char text[99]="",item[20]="",fichier[99]="Moyennes/";
- GetDlgItemText(hDlg,3,text,50);
- if (total <= 0) {
- MessageBox(GetActiveWindow(),"Aucune moyenne n'a été ajoutée.\t\n","Erreur",MB_ICONERROR|MB_OK);
- EndDialog(hDlg,0);
- return FALSE;
- }
- else if (strcmp(text,"") == 0) {
- MessageBox(GetActiveWindow(),"Il faut choisir un nom de fichier.\t\n","Erreur",MB_ICONERROR|MB_OK);
- return FALSE;
- }
- strcat(fichier,text);
- strcat(fichier,".moy");
- FILE* file=fopen(fichier,"w");
- for(a=0;a < total;a++) {
- SendMessage(list,LB_GETTEXT,a,(LPARAM)item);
- MessageBox(hwnd,item,"ok",MB_OK);
- fprintf(file,"%s\n",item);
- }
- fclose(file);
- EndDialog(hDlg,0);
- return TRUE;
- }
- break;
- default:
- return FALSE;
- }
- }
- //Tableau des coefficients
- BOOL APIENTRY ProcCoefficients(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) {
- switch (uMsg) {
- case WM_CLOSE:
- EndDialog(hDlg,0);
- break;
- case WM_CTLCOLORSTATIC:
- return((BOOL)ColorStatic(hDlg,wParam,lParam));
- case WM_INITDIALOG:
- {
- MessageBox(hDlg,"Les renseignements fournis ci-après ont été trouvés sur Internet.\t\n"
- "Malgré les nombreuses recherches, il se peut qu'un (ou plusieurs) coefficient(s)\t\n"
- "soi(en)t erroné(s). N'hésitez pas à contacter l'auteur (winkel@live.fr).\t\n","Avertissemen",
- MB_ICONINFORMATION|MB_OK);
- ShowWindow(GetDlgItem(hDlg,1),SW_HIDE);
- char** tab=split(Matieres,";",0);
- int nbr;
- for(nbr=0;tab[nbr] != NULL;nbr++) {}
- for(int a=0;a < nbr;a++)
- SendMessage(GetDlgItem(hDlg,2),LB_ADDSTRING,0,(LPARAM)tab[a]);
- free(tab);
- InitListView(hDlg);
- break;
- }
- case WM_COMMAND:
- if (LOWORD(wParam) == 2) {
- int num=SendMessage(GetDlgItem(hDlg,2),LB_GETCURSEL,0,0);
- char item[30];
- SendMessage(GetDlgItem(hDlg,2),LB_GETTEXT,num,(LPARAM)item);
- if (strcmp(item," ———————————— ") == 0)
- SendMessage(GetDlgItem(hDlg,3),LVM_DELETEALLITEMS,0,0);
- else if (strcmp(item,"L - Langue vivante 1") == 0)
- SelectItem(hDlg,0);
- else if (strcmp(item,"L - Langue vivante 2") == 0)
- SelectItem(hDlg,1);
- else if (strcmp(item,"L - Mathématiques") == 0)
- SelectItem(hDlg,2);
- else if (strcmp(item,"S - S.I") == 0)
- SelectItem(hDlg,3);
- else if (strcmp(item,"— S.V.T") == 0)
- SelectItem(hDlg,4);
- else if (strcmp(item,"— Mathématiques") == 0)
- SelectItem(hDlg,5);
- else if (strcmp(item,"— Physique/Chimie") == 0)
- SelectItem(hDlg,6);
- else if (strcmp(item,"S.E.S - Langues viv.") == 0)
- SelectItem(hDlg,7);
- else if (strcmp(item,"S.E.S - Maths") == 0)
- SelectItem(hDlg,8);
- else if (strcmp(item,"S.E.S - S.E.S") == 0)
- SelectItem(hDlg,9);
- if (strcmp(item,"S - S.V.T :") == 0) {
- popup=1;
- RECT rct;
- GetClientRect(hDlg,&rct);
- int cX=rct.right+1;
- int cY=rct.bottom-20;
- MoveWindow(GetDlgItem(hDlg,2),15,65,105,cY-81,TRUE);
- MoveWindow(GetDlgItem(hDlg,3),122,65,cX-142,cY-81,TRUE);
- ShowWindow(GetDlgItem(hDlg,1),SW_SHOW);
- }
- else {
- popup=0;
- RECT rct;
- GetClientRect(hDlg,&rct);
- int cX=rct.right+1;
- int cY=rct.bottom;
- MoveWindow(GetDlgItem(hDlg,2),15,65,105,cY-81,TRUE);
- MoveWindow(GetDlgItem(hDlg,3),122,65,cX-142,cY-81,TRUE);
- ShowWindow(GetDlgItem(hDlg,1),SW_HIDE);
- }
- }
- break;
- case WM_SIZE:
- int cX=LOWORD(lParam)+1;
- int cY=HIWORD(lParam);
- int cH=(popup)?20:0;
- MoveWindow(GetDlgItem(hDlg,1),15,cY-24,400,cY-10,TRUE);
- MoveWindow(GetDlgItem(hDlg,2),15,65,105,cY-81-cH,TRUE);
- MoveWindow(GetDlgItem(hDlg,3),122,65,cX-142,cY-81-cH,TRUE);
- break;
- case WM_SIZING:
- RECT* wndRect=(RECT*)lParam;
- int cXp=wndRect->right-wndRect->left;
- int cYp=wndRect->bottom-wndRect->top;
- if (cXp < 440) wndRect->right = 440+wndRect->left;
- if (cYp < 320) wndRect->bottom = 320+wndRect->top;
- break;
- default:
- return FALSE;
- }
- }
- //Enregistrement du graphe
- int __stdcall HwndToBmpFile(HWND hwnd,char* pszflname) {
- HDC memdc,hdc;
- HANDLE hfl;
- DWORD dwBytes,dwNumColors;
- void* pBits;
- HBITMAP hbmp;
- BITMAPFILEHEADER fileheader;
- BITMAPINFOHEADER infoheader;
- RGBQUAD colors[256];
- BITMAPINFO bmpinfo;
- HGDIOBJ hret;
- RECT rct;
- hdc=GetWindowDC(hwnd);
- if(!hdc)
- return 0;
- GetWindowRect(hwnd,&rct);
- rct.bottom-=rct.top;
- rct.right-=rct.left;
- rct.top=GetDeviceCaps(hdc,BITSPIXEL);
- if (rct.top <= 8)
- dwNumColors=256;
- else
- dwNumColors=0;
- if (!(memdc=CreateCompatibleDC(hdc)))
- goto relHwndDc;
- bmpinfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
- bmpinfo.bmiHeader.biWidth=rct.right;
- bmpinfo.bmiHeader.biHeight=rct.bottom;
- bmpinfo.bmiHeader.biPlanes=1;
- bmpinfo.bmiHeader.biBitCount=(WORD)rct.top;
- bmpinfo.bmiHeader.biCompression=BI_RGB;
- bmpinfo.bmiHeader.biSizeImage=0;
- bmpinfo.bmiHeader.biXPelsPerMeter=0;
- bmpinfo.bmiHeader.biYPelsPerMeter=0;
- bmpinfo.bmiHeader.biClrUsed=dwNumColors;
- bmpinfo.bmiHeader.biClrImportant=dwNumColors;
- hbmp=CreateDIBSection(hdc,&bmpinfo,DIB_PAL_COLORS,&pBits,NULL,0);
- if (!hbmp)
- goto errato;
- hret=SelectObject(memdc,hbmp);
- if ((!hret) || (hret == HGDI_ERROR))
- goto errato;
- if (!BitBlt(memdc,0,0,rct.right,rct.bottom,hdc,0,0,SRCCOPY))
- goto errato;
- if (dwNumColors)
- dwNumColors=GetDIBColorTable(memdc,0,dwNumColors,colors);
- fileheader.bfType=0x4D42;
- rct.left=dwNumColors*sizeof(RGBQUAD);
- fileheader.bfSize=((rct.right*rct.bottom*rct.top) >> 3)+rct.left+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
- fileheader.bfReserved1=fileheader.bfReserved2=0;
- fileheader.bfOffBits=rct.left+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
- infoheader.biSize=sizeof(BITMAPINFOHEADER);
- infoheader.biWidth=rct.right;
- infoheader.biHeight=rct.bottom;
- infoheader.biPlanes=1;
- infoheader.biBitCount=(WORD)rct.top;
- infoheader.biCompression=BI_RGB;
- infoheader.biSizeImage=infoheader.biClrImportant=0;
- infoheader.biXPelsPerMeter=infoheader.biYPelsPerMeter=0;
- infoheader.biClrUsed=dwNumColors;
- hfl=CreateFile(pszflname,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
- if (hfl == INVALID_HANDLE_VALUE) {
- DeleteObject(hbmp);
- goto errato;
- }
- WriteFile(hfl,&fileheader,sizeof(BITMAPFILEHEADER),&dwBytes,0);
- WriteFile(hfl,&infoheader,sizeof(BITMAPINFOHEADER),&dwBytes,0);
- if(!dwNumColors)
- WriteFile(hfl,colors,rct.left,&dwBytes,0);
- WriteFile(hfl,pBits,(rct.right*rct.bottom*rct.top) >> 3,&dwBytes, 0);
- CloseHandle(hfl);
- DeleteObject(hbmp);
- DeleteDC(memdc);
- return 1;
- errato:
- DeleteDC(memdc);
- relHwndDc:
- ReleaseDC(hwnd,hdc);
- return 0;
- }
- static HBRUSH ColorStatic(HWND hDlg,WPARAM wParam,LPARAM lParam) {
- if((HWND)lParam == GetDlgItem(hDlg,10)) {
- SetBkMode((HDC)wParam,TRANSPARENT);
- SetBkColor((HDC)wParam,GetSysColor(COLOR_INFOBK));
- SetTextColor((HDC)wParam,GetSysColor(COLOR_INFOTEXT));
- return GetSysColorBrush(COLOR_INFOBK);
- }
- else {
- SetBkMode((HDC)wParam,TRANSPARENT);
- SetBkColor((HDC)wParam,(COLORREF)GetSysColor(COLOR_3DFACE));
- SetTextColor((HDC)wParam,RGB(60,60,60));
- return GetSysColorBrush(COLOR_3DFACE);
- }
- }
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <richedit.h>
#include <commctrl.h>
#include "define.h"
//Variables globales et prototypes
HINSTANCE hinst;
void Refresh();
void Draw(BOOL calcul);
int __stdcall HwndToBmpFile(HWND hwnd,char *pszflname);
LRESULT CALLBACK MainWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
BOOL APIENTRY Dialog1Proc1(HWND,UINT,WPARAM,LPARAM);
BOOL APIENTRY Dialog1Proc2(HWND,UINT,WPARAM,LPARAM);
BOOL APIENTRY ProcCoefficients(HWND,UINT,WPARAM,LPARAM);
static HBRUSH ColorStatic(HWND,WPARAM,LPARAM);
int nbritem=0;
char nbritem2[100];
float afficheMoy=0;
int calcul=1;
int popup=0;
HANDLE fo,fp;
CHAR szFile[MAX_PATH]={0};
HWND hwnd,texte,ok,edit,annuler,recommencer,texte_background,list,combo,background,box,box2,goback,enregistrer,imprimer,
check,coeff05,coeff1,coeff2,coeffautre,coeff,note,about,charger,coeffBAC,hTTip;
//Déclaration de la fenêtre
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {
//Variables
MSG msg;
hinst=hinstance;
//Paramètres de la fenêtre
WNDCLASS wc;
wc.style=0;
wc.lpfnWndProc=MainWndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hinstance;
wc.hIcon=LoadIcon(hinstance,MAKEINTRESOURCE(1));
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)(COLOR_3DFACE+1);
wc.lpszMenuName= NULL;
wc.lpszClassName="MaWinClass";
if(!RegisterClass(&wc)) return FALSE;
//Création de la fenêtre
int cxS=GetSystemMetrics(SM_CXSCREEN);
int cyS=GetSystemMetrics(SM_CYSCREEN);
hwnd=CreateWindowEx(WS_EX_WINDOWEDGE,"MaWinClass","Aucune valeur",WS_CAPTION|WS_MINIMIZEBOX|WS_SYSMENU,(cxS-700)/2,(cyS-275)/2,320,275,HWND_DESKTOP,NULL,hinstance,NULL);
//Mise en place des contrôles
box=CreateWindowEx(0,"BUTTON","Aucune valeur",SS_LEFT|WS_CHILD|WS_VISIBLE|BS_GROUPBOX,10,10,280,225,hwnd,(HMENU)ID_BOX,hinstance,NULL);
SendMessage(box,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
box2=CreateWindowEx(0,"BUTTON","Propriétés :",SS_LEFT|WS_CHILD|WS_VISIBLE|BS_GROUPBOX,90,242,200,58,hwnd,(HMENU)ID_BOX2,hinstance,NULL);
SendMessage(box2,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
edit=CreateWindowEx(WS_EX_STATICEDGE|WS_EX_CLIENTEDGE,"EDIT","12.5",WS_CHILD|WS_VISIBLE|WS_EX_CLIENTEDGE|WS_EX_STATICEDGE,110,40,55,20,hwnd,(HMENU)ID_EDIT,hinstance,NULL);
SendMessage(edit,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
texte_background=CreateWindowEx(WS_EX_STATICEDGE,"STATIC","",SS_LEFT|WS_CHILD|WS_VISIBLE,110,150,170,74,hwnd,(HMENU)ID_TEXTE_BACKGROUND,hinstance,NULL);
SendMessage(texte_background,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
texte=CreateWindowEx(0,"STATIC","Astuce : Pensez à ramener vos notes sur 20 afin que les coefficients (s'ils sont activés) soient proportionnels.",WS_CHILD|WS_VISIBLE,120,160,150,60,hwnd,(HMENU)ID_TEXTE,hinstance,NULL);
SendMessage(texte,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
ok=CreateWindowEx(0,"BUTTON","OK",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,170,40,30,20,hwnd,(HMENU)ID_OK,hinstance,NULL);
SendMessage(ok,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
annuler=CreateWindowEx(0,"BUTTON","Annuler",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE|WS_DISABLED,110,70,90,20,hwnd,(HMENU)ID_ANNULER,hinstance,NULL);
SendMessage(annuler,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
recommencer=CreateWindowEx(0,"BUTTON","Recommencer",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE|WS_DISABLED,110,90,90,20,hwnd,(HMENU)ID_RECOMMENCER,hinstance,NULL);
SendMessage(recommencer,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
list=CreateWindowEx(WS_EX_STATICEDGE,"LISTBOX",NULL,WS_CHILD|WS_VISIBLE|WS_VSCROLL,20,40,80,200,hwnd,(HMENU)ID_LIST,hinstance,NULL);
SendMessage(list,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
combo=CreateWindowEx(0,"COMBOBOX",NULL,WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST,110,120,170,0,hwnd,(HMENU)ID_COMBO,hinstance,NULL);
SendMessage(combo,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
goback=CreateWindowEx(WS_EX_STATICEDGE,"BUTTON",">",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,295,35,15,40,hwnd,(HMENU)ID_GOBACK,hinstance,NULL);
SendMessage(goback,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
enregistrer=CreateWindowEx(0,"BUTTON","Enregistrer",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,95,255,90,20,hwnd,(HMENU)ID_ENREGISTRER,hinstance,NULL);
SendMessage(enregistrer,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
imprimer=CreateWindowEx(0,"BUTTON","Impression Ecran",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,195,255,90,20,hwnd,(HMENU)ID_IMPRIMER,hinstance,NULL);
SendMessage(imprimer,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
charger=CreateWindowEx(0,"BUTTON","Charger...",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,95,275,90,20,hwnd,(HMENU)ID_CHARGER,hinstance,NULL);
SendMessage(charger,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
check=CreateWindowEx(0,"BUTTON","Afficher la grille",WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,195,275,89,20,hwnd,(HMENU)ID_CHECK,hinstance,NULL);
SendMessage(check,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
background=CreateWindowEx(WS_EX_STATICEDGE,"STATIC",NULL,SS_LEFT|WS_CHILD|WS_VISIBLE,205,40,75,70,hwnd,(HMENU)ID_BACKGROUND,hinstance,NULL);
SendMessage(background,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
coeff05=CreateWindowEx(0,"BUTTON","0.5",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,210,44,69,17,hwnd,(HMENU)ID_COEFF05,hinstance,NULL);
SendMessage(coeff05,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
coeff1=CreateWindowEx(0,"BUTTON","1",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,210,59,69,17,hwnd,(HMENU)ID_COEFF1,hinstance,NULL);
SendMessage(coeff1,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
coeff2=CreateWindowEx(0,"BUTTON","2",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,210,74,69,17,hwnd,(HMENU)ID_COEFF2,hinstance,NULL);
SendMessage(coeff2,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
coeffautre=CreateWindowEx(0,"BUTTON","autre...",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,210,89,69,17,hwnd,(HMENU)ID_COEFFAUTRE,hinstance,NULL);
SendMessage(coeffautre,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
note=CreateWindowEx(0,"STATIC","Note :",WS_CHILD|WS_VISIBLE,110,25,50,14,hwnd,(HMENU)ID_NOTE,hinstance,NULL);
SendMessage(note,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
coeff=CreateWindowEx(0,"STATIC","Coefficient :",WS_CHILD|WS_VISIBLE,205,25,60,14,hwnd,(HMENU)ID_COEFF,hinstance,NULL);
SendMessage(coeff,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
note=CreateWindowEx(0,"STATIC","Note (coefficient)",WS_CHILD|WS_VISIBLE,20,25,90,14,hwnd,(HMENU)ID_EXEMPLE,hinstance,NULL);
SendMessage(note,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
about=CreateWindowEx(WS_EX_STATICEDGE,"BUTTON","A propos...",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,10,274,70,22,hwnd,(HMENU)ID_ABOUT,hinstance,NULL);
SendMessage(about,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
coeffBAC=CreateWindowEx(0,"BUTTON","Coeffs BAC",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,10,255,70,20,hwnd,(HMENU)ID_BAC,hinstance,NULL);
SendMessage(coeffBAC,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));
SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Moyenne (avec coefficients)");
SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Moyenne (sans coefficients)");
SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Nombre de notes >= 10");
SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Nombre de notes < 10");
SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Etendue (différence max - min)");
SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Médiane (avec coefficients)");
SendMessage(combo,CB_ADDSTRING,0,(LPARAM)"Médiane (sans coefficients)");
SendMessage(combo,CB_SELECTSTRING,0,(LPARAM)"Moyenne (avec coefficients)");
CheckDlgButton(hwnd,ID_COEFF1,BST_CHECKED);
//Création des Tooltips
TOOLINFO ti;
RECT rect;
hTTip=CreateWindow(TOOLTIPS_CLASS,NULL,WS_POPUP|TTS_NOPREFIX,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hwnd,NULL,hinstance,NULL);
GetClientRect(hwnd,&rect);
ti.cbSize=sizeof(TOOLINFO);
ti.uFlags=TTF_SUBCLASS;
GetClientRect(hwnd,&rect);
for(int a=1;a <= 137;a++) {
ti.hwnd=GetDlgItem(hwnd,a);
ti.uId=0;
if (a == ID_OK)
ti.lpszText="Ajouter la note à la liste";
else if (a == ID_ANNULER)
ti.lpszText="Annuler la dernière note";
else if (a == ID_RECOMMENCER)
ti.lpszText="SUpprimer toutes les notes";
else if (a == ID_LIST)
ti.lpszText="Liste des notes";
else if (a == ID_EDIT)
ti.lpszText="Tapez vos notes ici";
else if (a == ID_COMBO)
ti.lpszText="Interractions sur les notes";
else if (a == ID_GOBACK)
ti.lpszText="Afficher/cacher le graphe";
else if (a == ID_ENREGISTRER)
ti.lpszText="Enregistrer le tableau de notes actuel";
else if (a == ID_IMPRIMER)
ti.lpszText="Faire une 'impression-écran' de cette fenêtre (permet de sauvegarder le graphe)";
else if (a == ID_CHECK)
ti.lpszText="Afficher/cacher la grille sur le graphe";
else if (a == ID_COEFFAUTRE)
ti.lpszText="Choisir son propre coefficient (entre 1 et 99)";
else if (a == ID_ABOUT)
ti.lpszText="Afficher l'auteur du logiciel";
else if (a == ID_CHARGER)
ti.lpszText="Charger un tableau de notes";
ti.rect.left=rect.left;
ti.rect.top=rect.top;
ti.rect.right=rect.right;
ti.rect.bottom=rect.bottom;
SendMessage(hTTip,TTM_ADDTOOL,0,(LPARAM)&ti);
}
SetFocus(edit);
if (!hwnd) return FALSE;
ShowWindow(hwnd,nCmdShow);
while (GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//Traitement des messages Client-Machine
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_CONTEXTMENU:
HMENU hmenu,hpopup;
hmenu=LoadMenu(hinst,"LEMENU");
hpopup=GetSubMenu(hmenu,0);
TrackPopupMenuEx(hpopup,0,LOWORD(lParam),HIWORD(lParam),hwnd,NULL);
DestroyMenu(hmenu);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case 111:
DialogBox(hinst,"Coefficients",hwnd,(DLGPROC)ProcCoefficients);
break;
case 112:
DestroyWindow(hwnd);
break;
case ID_BAC:
DialogBox(hinst,"Coefficients",hwnd,(DLGPROC)ProcCoefficients);
break;
case ID_COEFFAUTRE:
DialogBox(hinst,"DIALOG1",hwnd,(DLGPROC)Dialog1Proc1);
break;
case ID_GOBACK:
RECT area;
GetWindowRect(hwnd,&area);
int width=area.right-area.left;
if (width == 320) {
SetWindowPos(hwnd,0,area.left,area.top,800,350,0);
SetWindowText(goback,"<");
}
else {
SetWindowPos(hwnd,0,area.left,area.top,320,275,0);
SetWindowText(goback,">");
}
break;
case ID_COMBO:
nbritem=SendMessage(list,LB_GETCOUNT,0,0);
if (nbritem > 0) Refresh();
break;
case ID_ANNULER:
nbritem=SendMessage(list,LB_GETCOUNT,0,0)-1;
SendMessage(list,LB_DELETESTRING,nbritem,0);
Refresh();
break;
case ID_RECOMMENCER:
if (MessageBox(hwnd,"Etes-vous sûr(e) de vouloir annuler tous les calculs en cours ?\t\n",
"Avertissement",MB_ICONQUESTION|MB_OKCANCEL) == IDOK) {
while (SendMessage(list,LB_GETCOUNT,0,0)*2)
SendMessage(list,LB_DELETESTRING,0,0);
SetWindowText(edit,"");
SendMessage(combo,CB_SELECTSTRING,0,(LPARAM)"Moyenne (avec coefficients)");
CheckDlgButton(hwnd,ID_COEFF05,BST_UNCHECKED);
CheckDlgButton(hwnd,ID_COEFF2,BST_UNCHECKED);
CheckDlgButton(hwnd,ID_COEFFAUTRE,BST_UNCHECKED);
CheckDlgButton(hwnd,ID_COEFF1,BST_CHECKED);
SetWindowText(coeffautre,"autre...");
EnableWindow(recommencer,FALSE);
Refresh();
}
break;
case ID_CHECK:
Refresh();
InvalidateRect(hwnd,NULL,FALSE);
UpdateWindow(hwnd);
break;
case ID_OK:
{
char text[10];
GetWindowText(edit,text,10);
int text2=atoi(text);
for(int a=1;a <= 20;a++) {
if (text2 == a) {
int b=7;
while (b<=10) {
if (IsDlgButtonChecked(hwnd,b)) {
char textcoeff[5];
double verif=1.5;
GetWindowText(GetDlgItem(hwnd,b),textcoeff,10);
if (strchr(textcoeff,'a') != NULL) {
sscanf(textcoeff,"autre: %lf",&verif);
sprintf(textcoeff,"%lf",verif);
}
char par[10]="";
sprintf(par,"%s (%s)",text,textcoeff);
SendMessage(list,LB_ADDSTRING,0,(LPARAM)par);
EnableWindow(annuler,TRUE);
EnableWindow(recommencer,TRUE);
Refresh();
break;
}
b++;
}
}
}
break;
}
case ID_CHARGER:
while (SendMessage(list,LB_GETCOUNT,0,0)*2)
SendMessage(list,LB_DELETESTRING,0,0);
SetWindowText(edit,"");
SendMessage(combo,CB_SELECTSTRING,0,(LPARAM)"Moyenne (avec coefficients)");
CheckDlgButton(hwnd,ID_COEFF05,BST_UNCHECKED);
CheckDlgButton(hwnd,ID_COEFF2,BST_UNCHECKED);
CheckDlgButton(hwnd,ID_COEFFAUTRE,BST_UNCHECKED);
CheckDlgButton(hwnd,ID_COEFF1,BST_CHECKED);
SetWindowText(coeffautre,"autre...");
EnableWindow(recommencer,FALSE);
OPENFILENAME ofn;
ZeroMemory(&ofn,sizeof(OPENFILENAME));
ofn.lStructSize=sizeof(OPENFILENAME);
ofn.hwndOwner=hwnd;
ofn.lpstrFile=szFile;
ofn.nMaxFile=MAX_PATH;
ofn.lpstrFilter="Fichier Moyenne (*.moy)\0*.moy\0";
ofn.nFilterIndex=1;
ofn.lpstrTitle="Ouvrir un fichier Moyenne...";
ofn.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
if (GetOpenFileName(&ofn) == TRUE) {
DWORD lenbloc,s;
char *tampon;
fo=CreateFile(szFile,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
lenbloc=GetFileSize(fo,NULL);
tampon=(PCHAR)LocalAlloc(LMEM_FIXED,lenbloc+1);
ReadFile(fo,tampon,lenbloc,&s,NULL);
tampon[lenbloc]=0;
int i=0,p=0;
for(i=0;tampon[i] != '\0';i++) {
if (tampon[i] == '\r') {
for(p=i;tampon[p]!= '\0';p++)
tampon[p]=tampon[p+1];
}
}
char* token=strtok(tampon,"\n");
while (token != NULL) {
SendMessage(list,LB_ADDSTRING,0,(LPARAM)token);
token=strtok(NULL,"\n");
}
LocalFree(tampon);
CloseHandle(fo);
Refresh();
}
break;
case ID_ENREGISTRER:
DialogBox(hinst,"DIALOG2",hwnd,(DLGPROC)Dialog1Proc2);
break;
case ID_IMPRIMER:
if (HwndToBmpFile(hwnd,"Moyennes/Graphique.bmp")) {
PostMessage(hwnd,WM_NEXTDLGCTL,0,0);
if (MessageBox(hwnd,"L'impression écran s'est effectuée avec succès !\t\n"
"L'image a été enregistrée dans le dossier /Moyennes/\t\n"
"sous le nom de 'Graphique.bmp'.\t\n\n"
"Souhaitez-vous ouvrire l'image maintenant ?\t\n",
"Information",MB_ICONINFORMATION|MB_OKCANCEL) != IDCANCEL)
ShellExecute(hwnd,"open","Graphique.bmp",NULL,"Moyennes",SW_SHOW);
}
else
MessageBox(hwnd,"Veuillez recommencer.","Erreur",MB_OK);
break;
case ID_ABOUT:
MessageBox(hwnd,"- Moyennes -\nLogiciel pour calculer ses moyennes\t\n(copyrights © WINKEL Vincent)\t\n",
"A propos...",MB_OK|MB_ICONASTERISK);
break;
}
case WM_PAINT:
Draw(calcul);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
}
//Aliases de raccourci (traitement du graphique)
void Refresh() {
nbritem=SendMessage(list,LB_GETCOUNT,0,0);
if (nbritem > 0) {
char textitem[100];
GetWindowText(combo,textitem,100);
char item1[]="Moyenne (avec coefficients)";
char item2[]="Moyenne (sans coefficients)";
char item3[]="Nombre de notes >= 10";
char item4[]="Nombre de notes < 10";
char item5[]="Etendue (différence max - min)";
char item6[]="Médiane (avec coefficients)";
char item7[]="Médiane (sans coefficients)";
int a=0;
double nbr=0,nbr2=0,note=0,coeff=0;
char text[20],texttitle[200];
if (strcmp(textitem,item1) == 0) {
for(a=0;a < nbritem;a++) {
SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
sscanf(text,"%lf (%lf)",¬e,&coeff);
nbr+=note*coeff;
nbr2+=coeff;
}
afficheMoy=nbr/nbr2;
sprintf(texttitle,"Moyenne (avec coefficients): %.2f",afficheMoy);
SetWindowText(box,texttitle);
SetWindowText(hwnd,texttitle);
calcul=1;
}
else if (strcmp(textitem,item2) == 0) {
for(a=0;a < nbritem;a++) {
SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
sscanf(text,"%lf (%lf)",¬e,&coeff);
nbr+=note;
}
afficheMoy=nbr/nbritem;
sprintf(texttitle,"Moyenne (sans coefficients): %.2f",afficheMoy);
SetWindowText(box,texttitle);
SetWindowText(hwnd,texttitle);
calcul=1;
}
if (strcmp(textitem,item3) == 0) {
for(a=0;a < nbritem;a++) {
SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
sscanf(text,"%lf (%lf)",¬e,&coeff);
if (note >= 10) nbr++;
nbr2++;
}
coeff=(nbr*100)/nbr2;
sprintf(texttitle,"Notes >= 10: %.0f/%.0f (%.1f %%)",nbr,nbr2,coeff);
SetWindowText(box,texttitle);
SetWindowText(hwnd,texttitle);
calcul=0;
}
else if (strcmp(textitem,item4) == 0) {
for(a=0;a < nbritem;a++) {
SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
sscanf(text,"%lf (%lf)",¬e,&coeff);
if (note < 10) nbr++;
nbr2++;
}
coeff=(nbr*100)/nbr2;
sprintf(texttitle,"Notes < 10: %.0f/%.0f (%.1f %%)",nbr,nbr2,coeff);
SetWindowText(box,texttitle);
SetWindowText(hwnd,texttitle);
calcul=0;
}
else if (strcmp(textitem,item5) == 0) {
if (nbritem < 2) {
SetWindowText(box,"2 valeurs minimum sont requises");
SetWindowText(hwnd,"2 valeurs minimum sont requises");
}
else {
nbr=0,nbr2=20;
for(a=0; a < nbritem;a++) {
SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
sscanf(text,"%lf (%lf)",¬e,&coeff);
if (note > nbr) nbr=note;
else if (note < nbr2) nbr2=note;
}
nbr-=nbr2;
sprintf(texttitle,"Etendue des notes: %.2f",nbr);
SetWindowText(box,texttitle);
SetWindowText(hwnd,texttitle);
calcul=0;
}
}
else if (strcmp(textitem,item6) == 0) {
for(a=0;a < nbritem;a++) {
SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
sscanf(text,"%lf (%lf)",¬e,&coeff);
nbr+=coeff;
}
nbr/=2;
SendMessage(list,LB_GETTEXT,nbr,(LPARAM)text);
sscanf(text,"%lf (%lf)",¬e,&coeff);
sprintf(texttitle,"Médiane (avec coefficients): %.2f",note);
SetWindowText(box,texttitle);
SetWindowText(hwnd,texttitle);
calcul=0;
}
else if (strcmp(textitem,item7) == 0) {
}
}
else {
SetWindowText(box,"Aucune valeur");
SetWindowText(hwnd,"Aucune valeur");
}
Draw(calcul);
InvalidateRect(hwnd,NULL,FALSE);
UpdateWindow(hwnd);
}
void Draw(BOOL calcul) {
PAINTSTRUCT ps;
HDC hdc=BeginPaint(hwnd,&ps);
HPEN hp2px,hpOld;
HBRUSH brush;
HFONT NewFont,OldFont;
LOGFONT lf;
ZeroMemory(&lf,sizeof(LOGFONT));
lstrcpy(lf.lfFaceName,"Arial");
lf.lfHeight=12;
NewFont=CreateFontIndirect(&lf);
OldFont=(HFONT)SelectObject(hdc,NewFont);
//Initialisation du graphique
/*if (calcul == FALSE) {
brush=CreateSolidBrush(RGB(220,220,220));
hpOld=(HPEN)SelectObject(hdc,brush);
}*/
Rectangle(hdc,330,10,780,300);
MoveToEx(hdc,360,20,NULL);
LineTo(hdc,360,270);
MoveToEx(hdc,350,260,NULL);
LineTo(hdc,745,260);
//Ajout des graduations
int a=20,b=360,d=20;
char c[3];
for(a=20;a <= 250;a+=12) {
sprintf(c,"%d",d);
MoveToEx(hdc,358,a,NULL);
LineTo(hdc,360,a);
int l=strlen(c);
if (l == 2) TextOut(hdc,345,a-5,c,lstrlen(c));
else TextOut(hdc,350,a-5,c,lstrlen(c));
d--;
}
for(b=360;b <= 750;b+=12) {
MoveToEx(hdc,b,261,NULL);
LineTo(hdc,b,263);
}
//Ajout de texte
sprintf(nbritem2,"%d",nbritem);
char e[]="Total des notes: ";
char e2[]=" / 32";
strcat(e,nbritem2);
strcat(e,e2);
lf.lfHeight=15;
NewFont=CreateFontIndirect(&lf);
OldFont=(HFONT)SelectObject(hdc,NewFont);
TextOut(hdc,480,275,e,lstrlen(e));
//Traçage du graphique
hp2px=CreatePen(PS_SOLID,1,RGB(150,150,250));
hpOld=(HPEN)SelectObject(hdc,hp2px);
a=0,b=362;
char text[20];
for(a=0;a <= nbritem-1;a++) {
if (a > 31) break;
SendMessage(list,LB_GETTEXT,a,(LPARAM)text);
float nbr=atof(text);
SelectObject(hdc,GetStockObject(LTGRAY_BRUSH));
Rectangle(hdc,b,ceil(260-12*nbr),b+9,260);
b+=12;
}
//Affichage (ou non) de la grille
if (IsDlgButtonChecked(hwnd,ID_CHECK)) {
hp2px=CreatePen(PS_SOLID,1,RGB(200,200,200));
hpOld=(HPEN)SelectObject(hdc,hp2px);
int a=20,b=372;
for(a=20;a<=250;a+=12) {
MoveToEx(hdc,361,a,NULL);
LineTo(hdc,745,a);
}
for(b=372;b<=750;b+=12) {
MoveToEx(hdc,b,20,NULL);
LineTo(hdc,b,260);
}
}
//Affichage de la moyenne
if (nbritem > 0) {
hp2px=CreatePen(PS_SOLID,1,RGB(50,150,170));
hpOld=(HPEN)SelectObject(hdc,hp2px);
float nbr=260-12*afficheMoy;
MoveToEx(hdc,360,nbr,NULL);
LineTo(hdc,745,nbr);
lf.lfHeight=13;
NewFont=CreateFontIndirect(&lf);
OldFont=(HFONT)SelectObject(hdc,NewFont);
TextOut(hdc,700,nbr-13,"Moyenne",7);
}
//Annonce de l'état du traitement du graphique
if (calcul == FALSE) {
hp2px=CreatePen(PS_SOLID,1,RGB(100,100,100));
hpOld=(HPEN)SelectObject(hdc,hp2px);
lf.lfHeight=40;
NewFont=CreateFontIndirect(&lf);
OldFont=(HFONT)SelectObject(hdc,NewFont);
BeginPath(hdc);
TextOut(hdc,400,100," Graphique non-traité ",22);
EndPath(hdc);
StrokePath(hdc);
}
DeleteObject(NewFont);
EndPaint(hwnd,&ps);
}
//Autre choix d'un coefficiant
BOOL APIENTRY Dialog1Proc1(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) {
switch (uMsg) {
case WM_COMMAND:
if (LOWORD(wParam) == 2) {
CheckDlgButton(hwnd,ID_COEFF1,BST_CHECKED);
CheckDlgButton(hwnd,ID_COEFFAUTRE,BST_UNCHECKED);
EndDialog(hDlg,0);
}
else if (LOWORD(wParam) == 1) {
char textedit[100]="";
GetDlgItemText(hDlg,3,textedit,100);
int verif=atoi(textedit);
if (verif <= 0 || verif > 99) {
MessageBox(hwnd,"Le coefficient doit être un nombre.\t\n"
" (compris entre 1 et 99)\t\n","Erreur de syntaxe",MB_OK|MB_ICONERROR);
SetFocus(GetDlgItem(hDlg,3));
}
else {
char textedit2[]="autre: ";
strcat(textedit2,textedit);
SetWindowText(coeffautre,textedit2);
EndDialog(hDlg,0);
return TRUE;
}
return FALSE;
}
break;
default:
return FALSE;
}
}
//Demande de nom de fichier
BOOL APIENTRY Dialog1Proc2(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) {
switch (uMsg) {
case WM_COMMAND:
if (LOWORD(wParam) == 2)
EndDialog(hDlg,0);
else if (LOWORD(wParam) == 1) {
//Vérification de l'existence du dossier /Moyennes/
HANDLE hDir=CreateFile("Moyennes",FILE_LIST_DIRECTORY,FILE_SHARE_READ|FILE_SHARE_DELETE,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);
if (hDir == INVALID_HANDLE_VALUE)
CreateDirectory("Moyennes",NULL);
else
CloseHandle(hDir);
//Procédure
int a=0,lenbloc=0,total=0;
total=SendMessage(list,LB_GETCOUNT,0,0);
char text[99]="",item[20]="",fichier[99]="Moyennes/";
GetDlgItemText(hDlg,3,text,50);
if (total <= 0) {
MessageBox(GetActiveWindow(),"Aucune moyenne n'a été ajoutée.\t\n","Erreur",MB_ICONERROR|MB_OK);
EndDialog(hDlg,0);
return FALSE;
}
else if (strcmp(text,"") == 0) {
MessageBox(GetActiveWindow(),"Il faut choisir un nom de fichier.\t\n","Erreur",MB_ICONERROR|MB_OK);
return FALSE;
}
strcat(fichier,text);
strcat(fichier,".moy");
FILE* file=fopen(fichier,"w");
for(a=0;a < total;a++) {
SendMessage(list,LB_GETTEXT,a,(LPARAM)item);
MessageBox(hwnd,item,"ok",MB_OK);
fprintf(file,"%s\n",item);
}
fclose(file);
EndDialog(hDlg,0);
return TRUE;
}
break;
default:
return FALSE;
}
}
//Tableau des coefficients
BOOL APIENTRY ProcCoefficients(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) {
switch (uMsg) {
case WM_CLOSE:
EndDialog(hDlg,0);
break;
case WM_CTLCOLORSTATIC:
return((BOOL)ColorStatic(hDlg,wParam,lParam));
case WM_INITDIALOG:
{
MessageBox(hDlg,"Les renseignements fournis ci-après ont été trouvés sur Internet.\t\n"
"Malgré les nombreuses recherches, il se peut qu'un (ou plusieurs) coefficient(s)\t\n"
"soi(en)t erroné(s). N'hésitez pas à contacter l'auteur (winkel@live.fr).\t\n","Avertissemen",
MB_ICONINFORMATION|MB_OK);
ShowWindow(GetDlgItem(hDlg,1),SW_HIDE);
char** tab=split(Matieres,";",0);
int nbr;
for(nbr=0;tab[nbr] != NULL;nbr++) {}
for(int a=0;a < nbr;a++)
SendMessage(GetDlgItem(hDlg,2),LB_ADDSTRING,0,(LPARAM)tab[a]);
free(tab);
InitListView(hDlg);
break;
}
case WM_COMMAND:
if (LOWORD(wParam) == 2) {
int num=SendMessage(GetDlgItem(hDlg,2),LB_GETCURSEL,0,0);
char item[30];
SendMessage(GetDlgItem(hDlg,2),LB_GETTEXT,num,(LPARAM)item);
if (strcmp(item," ———————————— ") == 0)
SendMessage(GetDlgItem(hDlg,3),LVM_DELETEALLITEMS,0,0);
else if (strcmp(item,"L - Langue vivante 1") == 0)
SelectItem(hDlg,0);
else if (strcmp(item,"L - Langue vivante 2") == 0)
SelectItem(hDlg,1);
else if (strcmp(item,"L - Mathématiques") == 0)
SelectItem(hDlg,2);
else if (strcmp(item,"S - S.I") == 0)
SelectItem(hDlg,3);
else if (strcmp(item,"— S.V.T") == 0)
SelectItem(hDlg,4);
else if (strcmp(item,"— Mathématiques") == 0)
SelectItem(hDlg,5);
else if (strcmp(item,"— Physique/Chimie") == 0)
SelectItem(hDlg,6);
else if (strcmp(item,"S.E.S - Langues viv.") == 0)
SelectItem(hDlg,7);
else if (strcmp(item,"S.E.S - Maths") == 0)
SelectItem(hDlg,8);
else if (strcmp(item,"S.E.S - S.E.S") == 0)
SelectItem(hDlg,9);
if (strcmp(item,"S - S.V.T :") == 0) {
popup=1;
RECT rct;
GetClientRect(hDlg,&rct);
int cX=rct.right+1;
int cY=rct.bottom-20;
MoveWindow(GetDlgItem(hDlg,2),15,65,105,cY-81,TRUE);
MoveWindow(GetDlgItem(hDlg,3),122,65,cX-142,cY-81,TRUE);
ShowWindow(GetDlgItem(hDlg,1),SW_SHOW);
}
else {
popup=0;
RECT rct;
GetClientRect(hDlg,&rct);
int cX=rct.right+1;
int cY=rct.bottom;
MoveWindow(GetDlgItem(hDlg,2),15,65,105,cY-81,TRUE);
MoveWindow(GetDlgItem(hDlg,3),122,65,cX-142,cY-81,TRUE);
ShowWindow(GetDlgItem(hDlg,1),SW_HIDE);
}
}
break;
case WM_SIZE:
int cX=LOWORD(lParam)+1;
int cY=HIWORD(lParam);
int cH=(popup)?20:0;
MoveWindow(GetDlgItem(hDlg,1),15,cY-24,400,cY-10,TRUE);
MoveWindow(GetDlgItem(hDlg,2),15,65,105,cY-81-cH,TRUE);
MoveWindow(GetDlgItem(hDlg,3),122,65,cX-142,cY-81-cH,TRUE);
break;
case WM_SIZING:
RECT* wndRect=(RECT*)lParam;
int cXp=wndRect->right-wndRect->left;
int cYp=wndRect->bottom-wndRect->top;
if (cXp < 440) wndRect->right = 440+wndRect->left;
if (cYp < 320) wndRect->bottom = 320+wndRect->top;
break;
default:
return FALSE;
}
}
//Enregistrement du graphe
int __stdcall HwndToBmpFile(HWND hwnd,char* pszflname) {
HDC memdc,hdc;
HANDLE hfl;
DWORD dwBytes,dwNumColors;
void* pBits;
HBITMAP hbmp;
BITMAPFILEHEADER fileheader;
BITMAPINFOHEADER infoheader;
RGBQUAD colors[256];
BITMAPINFO bmpinfo;
HGDIOBJ hret;
RECT rct;
hdc=GetWindowDC(hwnd);
if(!hdc)
return 0;
GetWindowRect(hwnd,&rct);
rct.bottom-=rct.top;
rct.right-=rct.left;
rct.top=GetDeviceCaps(hdc,BITSPIXEL);
if (rct.top <= 8)
dwNumColors=256;
else
dwNumColors=0;
if (!(memdc=CreateCompatibleDC(hdc)))
goto relHwndDc;
bmpinfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmpinfo.bmiHeader.biWidth=rct.right;
bmpinfo.bmiHeader.biHeight=rct.bottom;
bmpinfo.bmiHeader.biPlanes=1;
bmpinfo.bmiHeader.biBitCount=(WORD)rct.top;
bmpinfo.bmiHeader.biCompression=BI_RGB;
bmpinfo.bmiHeader.biSizeImage=0;
bmpinfo.bmiHeader.biXPelsPerMeter=0;
bmpinfo.bmiHeader.biYPelsPerMeter=0;
bmpinfo.bmiHeader.biClrUsed=dwNumColors;
bmpinfo.bmiHeader.biClrImportant=dwNumColors;
hbmp=CreateDIBSection(hdc,&bmpinfo,DIB_PAL_COLORS,&pBits,NULL,0);
if (!hbmp)
goto errato;
hret=SelectObject(memdc,hbmp);
if ((!hret) || (hret == HGDI_ERROR))
goto errato;
if (!BitBlt(memdc,0,0,rct.right,rct.bottom,hdc,0,0,SRCCOPY))
goto errato;
if (dwNumColors)
dwNumColors=GetDIBColorTable(memdc,0,dwNumColors,colors);
fileheader.bfType=0x4D42;
rct.left=dwNumColors*sizeof(RGBQUAD);
fileheader.bfSize=((rct.right*rct.bottom*rct.top) >> 3)+rct.left+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
fileheader.bfReserved1=fileheader.bfReserved2=0;
fileheader.bfOffBits=rct.left+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
infoheader.biSize=sizeof(BITMAPINFOHEADER);
infoheader.biWidth=rct.right;
infoheader.biHeight=rct.bottom;
infoheader.biPlanes=1;
infoheader.biBitCount=(WORD)rct.top;
infoheader.biCompression=BI_RGB;
infoheader.biSizeImage=infoheader.biClrImportant=0;
infoheader.biXPelsPerMeter=infoheader.biYPelsPerMeter=0;
infoheader.biClrUsed=dwNumColors;
hfl=CreateFile(pszflname,GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if (hfl == INVALID_HANDLE_VALUE) {
DeleteObject(hbmp);
goto errato;
}
WriteFile(hfl,&fileheader,sizeof(BITMAPFILEHEADER),&dwBytes,0);
WriteFile(hfl,&infoheader,sizeof(BITMAPINFOHEADER),&dwBytes,0);
if(!dwNumColors)
WriteFile(hfl,colors,rct.left,&dwBytes,0);
WriteFile(hfl,pBits,(rct.right*rct.bottom*rct.top) >> 3,&dwBytes, 0);
CloseHandle(hfl);
DeleteObject(hbmp);
DeleteDC(memdc);
return 1;
errato:
DeleteDC(memdc);
relHwndDc:
ReleaseDC(hwnd,hdc);
return 0;
}
static HBRUSH ColorStatic(HWND hDlg,WPARAM wParam,LPARAM lParam) {
if((HWND)lParam == GetDlgItem(hDlg,10)) {
SetBkMode((HDC)wParam,TRANSPARENT);
SetBkColor((HDC)wParam,GetSysColor(COLOR_INFOBK));
SetTextColor((HDC)wParam,GetSysColor(COLOR_INFOTEXT));
return GetSysColorBrush(COLOR_INFOBK);
}
else {
SetBkMode((HDC)wParam,TRANSPARENT);
SetBkColor((HDC)wParam,(COLORREF)GetSysColor(COLOR_3DFACE));
SetTextColor((HDC)wParam,RGB(60,60,60));
return GetSysColorBrush(COLOR_3DFACE);
}
}
Conclusion
Je compte l'intégrer à une "suite" de logiciels de bureautique pour étudiants.
Au passage, si quelqu'un a des idées d'applications à proposer...
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 15 avril 2008 10:02:54 :
- problème avec le zip
- 15 avril 2008 10:03:51 :
- problème avec le zip
- 12 octobre 2008 02:48:06 :
- - recodage complet du programme
- ajout de fonctions
- correction de bogues
- 12 octobre 2008 02:49:46 :
- - recodage complet du programme
- ajout de fonctions
- correction de bogues
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Win32 Dialog [ par xarier ]
Hi allvoila j'ai creé deux boite de dialog (resource je veut dire au prog quand je cliquerait sur un button dans la premiere fenetre la deusieme souv
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
Un graphique simple à mettre en place [ par Oeil_de_taupe ]
Bonjour les codeurs, J'ai fait un prog qui récupère le son depuis une entrée audio, jusqu'à la aucun problème (je récup
win32 interface graphique devcpp [ par Stephane ]
Salut a tous Voila je fait le pas progressif Visual Basic vers CPP (j'utilise devcpp). Je commence à """"""maitriser"""""" les class et pointeur
Win32 affichage graphique fuite mémoire [ par _Jonathan ]
Bonjour a tous,j'ai fait une petite application affichant un graphique. Mais lorsque je le lance, le programme me bouffe toutes les ressources sous wi
[API WIN32] Création d'une courbe dans un Dialog [ par tarretg ]
Bonjour, Je développe actuellement un projet sous Visual C++ avec pluseurs Dialog Box en API. Sur l'une d'entre elles, je voudrais afficher un graph
[C++ Win32] un menu avec une fenêtre Dialog [ par F0ra ]
Je n'arrive pas à afficher un menu avec une fenêtre Dialog en C++ Win32Comme ceci :http://pages.cpsc.ucalgary.ca/~carman/481/examples/vb.net/menus.2.j
Comment insérer un dialog dans un dialog (ou ressource dans un dialog) WIN32 [ par tazmania37 ]
Bonjour,Je m'explique mieux.J'ai crée des ressources, correspondants à des modèles graphiques.Ce sont des petites fenêtres avec du texte et des icones
MSchart graphique sous Visual C++ [ par The WidoW ]
Bonjour,Je suis en stage dans un grand laboratoire de recherche...On m'a demandé de créer un logiciel pour une manip...J'ai du mal avec le c
Update screen win32 [ par MoDDiB ]
Voilà j'ai un problème avec le rafraichissement de ma fenêtre en win32 je m'explique : je dessine une ligne à l'aide de : &
|
Téléchargements
Logiciels à télécharger sur le même thème :
|