Soyez le premier à donner votre avis sur cette source.
Vue 8 794 fois - Téléchargée 918 fois
#define _WIN32_IE 0x0700 #include <windows.h> #include <commctrl.h> #include <stdio.h> #include <math.h> #define HDF_SORTUP 0x0400 #define HDF_SORTDOWN 0x0200 //Variables globales et prototypes HINSTANCE hinst; LRESULT CALLBACK MainWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); int start=1,grid=1,modif=0; HWND hwnd,ListView,hTTip,save,load,hLVHeader,add,supp,aide,about; HMENU hMenu; #include "define.h" //Déclaration de la fenêtre int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { //Verification que le programme n'est pas déjà ouvert if (FindWindow(0,"Repertoire") != 0) { MessageBox(0,"Une application Repertoire est déjà en cours.\t\n" "Vous ne pouvez pas ouvrir deux fois cette même application.\t\n","Repertoire - Erreur",MB_OK|MB_ICONERROR); return 0; } //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=0; wc.lpszClassName="MaWinClass"; if(!RegisterClass(&wc)) return FALSE; //Création de la fenêtre int cxS=GetSystemMetrics(SM_CXSCREEN); int cyS=GetSystemMetrics(SM_CYSCREEN); InitMenus(); hwnd=CreateWindowEx(WS_EX_WINDOWEDGE,"MaWinClass","Repertoire",WS_CLIPCHILDREN|WS_OVERLAPPEDWINDOW,(cxS-700)/2,(cyS-350)/2,260,350,HWND_DESKTOP,hMenu,hinstance,NULL); //Mise en place des contrôles add=CreateWindowEx(0,"BUTTON","Ajouter...",BS_DEFPUSHBUTTON|WS_CHILD|WS_VISIBLE,0,0,0,0,hwnd,(HMENU)ID_AJOUTER,hinstance,NULL); SendMessage(add,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0)); supp=CreateWindowEx(0,"BUTTON","Supprimer",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE|WS_DISABLED,0,0,0,0,hwnd,(HMENU)ID_SUPPRIMER,hinstance,NULL); SendMessage(supp,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0)); save=CreateWindowEx(0,"BUTTON","Enregistrer",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,0,0,0,0,hwnd,(HMENU)ID_ENREGISTRER,hinstance,NULL); SendMessage(save,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0)); about=CreateWindowEx(0,"BUTTON","©",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,0,0,0,0,hwnd,(HMENU)ID_ABOUT,hinstance,NULL); SendMessage(about,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0)); aide=CreateWindowEx(0,"BUTTON","?",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,0,0,0,0,hwnd,(HMENU)ID_AIDE,hinstance,NULL); SendMessage(aide,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0)); InitListView(); EnableMenuItem((HMENU)MAKEINTRESOURCE("LEMNU"),ID_SUPPRIMER,MF_GRAYED); //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 <= 10;a++) { ti.hwnd=GetDlgItem(hwnd,a); ti.uId=0; if (a == ID_LISTVIEW) ti.lpszText="Repertoire de contacts"; else if (a == ID_ENREGISTRER) ti.lpszText="Enregistrer les contacts"; else if (a == ID_CHARGER) ti.lpszText="Charger une liste de contacts"; else if (a == ID_AJOUTER) ti.lpszText="Ajouter un contact"; else if (a == ID_SUPPRIMER) ti.lpszText="Supprimer le contact"; else if (a == ID_ABOUT) ti.lpszText="Afficher les copyrights du logiciel"; else ti.lpszText=""; 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); } InitListe(); //Affichage du programme if (!hwnd) return FALSE; ShowWindow(hwnd,nCmdShow); while (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } //Fonction d'appel LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { LPNMLISTVIEW pnmv; HDITEM hdi; EnableWindow(save,(modif)?TRUE:FALSE); EnableMenuItem(hMenu,ID_ENREGISTRER,(modif)?MF_ENABLED:MF_GRAYED); switch (uMsg) { case WM_CLOSE: VerifSave(); break; case WM_COMMAND: switch (LOWORD(wParam)) { case 102: VerifSave(); break; case 103: if (GetMenuState(hMenu,104,MF_BYCOMMAND) == MF_UNCHECKED) { nSort=HDF_SORTUP; hdi.fmt&=~HDF_SORTDOWN; hdi.fmt|=HDF_SORTUP; Header_SetItem(hLVHeader,SUBITEM,&hdi); ListView_SortItems(ListView,lpCompareFunctions[nSelectedColumn],0); CheckMenuItem(hMenu,104,MF_UNCHECKED); CheckMenuItem(hMenu,103,MF_CHECKED); } break; case 104: if (GetMenuState(hMenu,104,MF_BYCOMMAND) == MF_UNCHECKED) { nSort=HDF_SORTDOWN; hdi.fmt&=~HDF_SORTUP; hdi.fmt|=HDF_SORTDOWN; Header_SetItem(hLVHeader,SUBITEM,&hdi); ListView_SortItems(ListView,lpCompareFunctions[nSelectedColumn],0); CheckMenuItem(hMenu,103,MF_UNCHECKED); CheckMenuItem(hMenu,104,MF_CHECKED); } break; case 105: SendMessage(ListView,LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_GRIDLINES,(grid)?~LVS_EX_GRIDLINES:LVS_EX_GRIDLINES); CheckMenuItem(hMenu,105,(grid)?MF_UNCHECKED:MF_CHECKED); grid=(grid)?0:1; break; case 106: if (MessageBox(hwnd,"Etes-vous sûr(e) de vouloir supprimer tous les contacts ?\t\n", "Avertissement",MB_ICONINFORMATION|MB_YESNO) == IDYES) { ListView_DeleteAllItems(ListView); modif=1; } break; case ID_AJOUTER: DialogBox(hinst,"AjoutBox",hwnd,(DLGPROC)DialogProc1); break; case ID_SUPPRIMER: if (MessageBox(hwnd,"Etes-vous sûr(e) de vouloir supprimer ce contact ?\t\n", "Avertissement",MB_ICONINFORMATION|MB_YESNO) == IDYES) { ListView_DeleteItem(ListView,ITEM); EnableWindow(supp,FALSE); EnableMenuItem(hMenu,ID_SUPPRIMER,MF_GRAYED); modif=1; } break; case ID_ENREGISTRER: Save(); break; case ID_AIDE: MessageBox(hwnd,Help,"Aide du logiciel",MB_OK|MB_ICONQUESTION); break; case ID_ABOUT: MessageBox(hwnd,"- Repertoire -\nLogiciel pour garder en mémoire les coordonnées de ses ami(e)s\t\n(copyrights © WINKEL Vincent)\t\n", "A propos...",MB_OK|MB_ICONASTERISK); break; } break; case WM_DESTROY: PostQuitMessage(0); break; case WM_SIZE: int cX=LOWORD(lParam)+1; int cY=HIWORD(lParam); MoveWindow(ListView,0,0,cX,cY-24,TRUE); MoveWindow(add,2,cY-22,70,20,TRUE); MoveWindow(supp,72,cY-22,70,20,TRUE); MoveWindow(save,142,cY-22,70,20,TRUE); MoveWindow(aide,225,cY-22,25,20,TRUE); break; case WM_SIZING: RECT* wndRect=(RECT*)lParam; int cXp=wndRect->right-wndRect->left; int cYp=wndRect->bottom-wndRect->top; if (cXp < 260) wndRect->right=260+wndRect->left; if (cYp < 350) wndRect->bottom=350+wndRect->top; break; case WM_NOTIFY: if ((((LPNMHDR)lParam)->hwndFrom) == ListView) { if ((((LPNMHDR)lParam)->code) == NM_CLICK) { LPNMITEMACTIVATE lpnmitem=(LPNMITEMACTIVATE)lParam; ITEM=lpnmitem->iItem; EnableWindow(supp,(ITEM != -1)?TRUE:FALSE); EnableMenuItem(hMenu,ID_SUPPRIMER,(ITEM != -1)?MF_ENABLED:MF_GRAYED); } if ((((LPNMHDR)lParam)->code) == NM_DBLCLK) { LPNMITEMACTIVATE lpnmitem=(LPNMITEMACTIVATE)lParam; ITEM=lpnmitem->iItem; SUBITEM=lpnmitem->iSubItem; if (ITEM == -1) break; DialogBox(hinst,"InsertBox",hwnd,(DLGPROC)DialogProc); break; } if ((((LPNMHDR)lParam)->code) == LVN_COLUMNCLICK) { pnmv=(LPNMLISTVIEW)lParam; hdi.mask=HDI_FORMAT; Header_GetItem(hLVHeader,pnmv->iSubItem,&hdi); if(pnmv->iSubItem > 0) return 0; if(nSelectedColumn == pnmv->iSubItem) { if(nSort == HDF_SORTDOWN) { nSort=HDF_SORTUP; hdi.fmt&=~HDF_SORTDOWN; hdi.fmt|=HDF_SORTUP; } else { nSort=HDF_SORTDOWN; hdi.fmt&=~HDF_SORTUP; hdi.fmt|=HDF_SORTDOWN; } Header_SetItem(hLVHeader,pnmv->iSubItem,&hdi); } ListView_SortItems(ListView,lpCompareFunctions[nSelectedColumn],0); break; } } default: return DefWindowProc(hwnd,uMsg,wParam,lParam); } }
29 oct. 2008 à 20:45
1°) En quittant sans mise à jour, au lieu d'afficher :
Le repertoire a été modifié. Etes-vous sûr(e) de vouloir quitter l'application ?
Il serait encore plus explicite d'afficher :
Le répertoire modifié n'est pas enregistré. Etes-vous sûr(e) de vouloir quitter l'application ?
2°) Et dans l'aide il serait plus explicite de dire :
II. Ajouter/modifier des informations sur un contact
Dans la ligne du contact à modifier doucle-cliquez sur le champ à mettre à jour.
Bravo.
29 oct. 2008 à 21:00
Pour le premier, je me demandais même si mettre un truc du genre "Le répertoire a été modifié. Avant de quitter, voulez-vous l'enregistrer?" avec comme choix "oui", "non" ou "annuler" (pour ne par quitter, finalement). C'est ce qu'on trouve dans la plupart des logiciels, mais je ne sais pas pourquoi je ne l'ai pas fait... par flemme, sans doute.
Par contre pour le 2ème point tu as entièrement raison, je ne savais pas trop comment formuler ça.
Je corrigerai demain.
Merci :)
30 oct. 2008 à 10:39
30 oct. 2008 à 12:23
30 oct. 2008 à 12:57
Bidouille le raccourci lanceur de l'exe et tu verras.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.