on vient de me filer ça sur un forum (programmationworld) :
//si on demande a ouvrir une nouvelle carte case CM_FILEOPEN: //vider le buffer contenant le chemin de la carte szFile[0] = 0; //vider le buffer contenant le titre de la carte szFileTitle[0] = 0; //vider le buffer contenant le nom du répertoire szInitDir[0] = 0; //vider le buffer du filtre de fichier memset (filtreDeFichier, 0, sizeof (filtreDeFichier)); //copier dans le buffer la string du filtre de fichiers strcpy (filtreDeFichier, "Fichiers Cartes DirectX (*.EDX)|*.edx" ); //terminer la string par un 0 filtreDeFichier[37] = 0; //vider le buffer memset(&nomDuFichierOuvert, 0, sizeof(OPENFILENAME)); //definir les paramêtres pour la boite de dialogue open nomDuFichierOuvert.lStructSize = sizeof(OPENFILENAME); nomDuFichierOuvert.hwndOwner = hwnd; nomDuFichierOuvert.lpstrFilter = filtreDeFichier; nomDuFichierOuvert.nFilterIndex = 1; nomDuFichierOuvert.lpstrFile= szFile; nomDuFichierOuvert.nMaxFile = sizeof(szFile); nomDuFichierOuvert.lpstrFileTitle = szFileTitle; nomDuFichierOuvert.nMaxFileTitle = sizeof(szFileTitle); nomDuFichierOuvert.lpstrInitialDir = szInitDir; nomDuFichierOuvert.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; //si on a ouvert correctement un fichier if (GetOpenFileName(&nomDuFichierOuvert)) { //si la carte d'avant a été modifiée if (carteModifiee) { //informer l'utilisateur if (MessageBox (hwnd, "Attention:\nLa carte a été modifiée mais n'a pas été eregistrée, continuer la création d'une nouvelle carte?", "EdiX", MB_OKCANCEL | MB_ICONQUESTION)==IDOK) { strcpy (nomDeLaCarte, szFile); MEDestroyUndoBuffs(); LoadProject (); curlayer = 0; onion = 0; oniondark = 0; carteModifiee = 0; Rejig (); } } else { strcpy (nomDeLaCarte, szFile); MEDestroyUndoBuffs(); LoadProject (); curlayer = 0; onion = 0; oniondark = 0; Rejig (); } } break; //si on sauvegarde la carte case CM_FILESAVE: //si une carte est en cours d'utilisation if (nomDeLaCarte[0] && mappt!=NULL) { //alors si on ne peut sauvegarder if (SaveProject ()) //en informer l'utilisateur MessageBox (hwnd, "Impossible de sauvegarder la carte !", "EdiX", MB_OK | MB_ICONEXCLAMATION); else //indiquer que la carte est modifiée carteModifiee = 0; } break; //si on sauvegarde sous case CM_FILESAVEAS: //si aucune map n'a été ouverte if (mappt==NULL) { //en informer l'utilisateur MessageBox (hwnd, "Aucune carte a sauvegarder !", "EdiX", MB_OK | MB_ICONEXCLAMATION); break; } //vider le buffer contenant le chemin de la carte szFile[0] = 0; //vider le buffer contenant le titre de la carte szFileTitle[0] = 0; //vider le buffer contenant le nom du répertoire szInitDir[0] = 0; //vider le buffer du filtre de fichier memset (filtreDeFichier, 0, sizeof (filtreDeFichier)); //copier dans le buffer la string du filtre de fichiers strcpy (filtreDeFichier, "Fichiers Cartes DirectX (*.EDX)|*.edx" ); //terminer la string par un 0 filtreDeFichier[37] = 0; //vider le buffer memset(&nomDuFichierOuvert, 0, sizeof(OPENFILENAME)); //definir les paramêtres pour la boite de dialogue save as nomDuFichierOuvert.lStructSize = sizeof(OPENFILENAME); nomDuFichierOuvert.hwndOwner = hwnd; nomDuFichierOuvert.lpstrFilter = filtreDeFichier; nomDuFichierOuvert.nFilterIndex = 1; nomDuFichierOuvert.lpstrFile= szFile; nomDuFichierOuvert.nMaxFile = sizeof(szFile); nomDuFichierOuvert.lpstrFileTitle = szFileTitle; nomDuFichierOuvert.nMaxFileTitle = sizeof(szFileTitle); nomDuFichierOuvert.lpstrInitialDir = szInitDir; nomDuFichierOuvert.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; //si on sauvegarde sous sans problèmes if (GetSaveFileName(&nomDuFichierOuvert)) { //enregistrer le nouveau nom de la carte strcpy (nomDeLaCarte, szFile); //obtenir la taille de ce nom increment = strlen (nomDeLaCarte); while (increment) { //chercher le '.' delimitant l'extantion if (nomDeLaCarte[increment]=='.') break; //réduire l'increment de 1 increment--; } //si le nom ne contient pas l'extension... if (strcmp (nomDeLaCarte+increment, ".edx" ) && strcmp (nomDeLaCarte+increment, ".edx" )) //...alors donner l'extension strcat (nomDeLaCarte, ".edx" ); //si on arrive pas a sauvegarder le fichier... if (SaveProject ()) //...alors en informer l'utilisateur MessageBox (hwnd, "Impossible de sauvegarder la carte !", "EdiX", MB_OK | MB_ICONEXCLAMATION); //sinon indiquer que la carte vient d'être sauvegardée else carteModifiee = 0; } break; //si on importe une carte case CM_FILEIMPORT: //si aucune carte n'a été ouverte, il n'y a rien à importer if (mappt==NULL) break; //vider le buffer contenant le chemin de la carte szFile[0] = 0; //vider le buffer contenant le titre de la carte szFileTitle[0] = 0; //vider le buffer contenant le nom du répertoire szInitDir[0] = 0; //vider le buffer du filtre de fichier memset (filtreDeFichier, 0, sizeof (filtreDeFichier)); //copier dans le buffer la string du filtre de fichiers strcpy (filtreDeFichier, "Bitmap files (*.BMP)|*.bmp|Map Array Layer (*.MAR)|*.mar" ); //terminer la string par un 0 filtreDeFichier[20] = 0; filtreDeFichier[26] = 0; filtreDeFichier[56] = 0; //vider le buffer memset(&nomDuFichierOuvert, 0, sizeof(OPENFILENAME)); //definir les paramêtres pour la boite de dialogue open nomDuFichierOuvert.lStructSize = sizeof(OPENFILENAME); nomDuFichierOuvert.hwndOwner = hwnd; nomDuFichierOuvert.lpstrFilter = filtreDeFichier; nomDuFichierOuvert.nFilterIndex = 1; nomDuFichierOuvert.lpstrFile= szFile; nomDuFichierOuvert.nMaxFile = sizeof(szFile); nomDuFichierOuvert.lpstrFileTitle = szFileTitle; nomDuFichierOuvert.nMaxFileTitle = sizeof(szFileTitle); nomDuFichierOuvert.lpstrInitialDir = szInitDir; nomDuFichierOuvert.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; //si on a reussit à importer correctement if (GetOpenFileName(&nomDuFichierOuvert)) { //on detruit les buffers d'annulation MEDestroyUndoBuffs(); //si on a importé un map layer if (!strcmp ((szFile+strlen(szFile))-4, ".MAR" ) || !strcmp ((szFile+strlen(szFile))-4, ".mar" )) { //ouvrir le fichier marfpt = fopen (szFile, "rb" ); //s'il n'existe pas if (marfpt==NULL) { MessageBox (hwnd, "Erreur lors de l'importation de données de carte, opération annulée", "Importer", MB_OK|MB_ICONEXCLAMATION); break; } //mettre la position du pointeur à la fin de marfpt fseek (marfpt, 0, SEEK_END); //chercher la position de ce pointeur et la sauvegarder dans 'increment' increment = (int) ftell (marfpt); //si l'increment n'a pas la bonne valeur correpondant a la taille souhaitée if (increment!=(largeurCarte*hauteurCarte*2)) { //on ferme le fichier fclose (marfpt); //et on informe l'utilisateur MessageBox (hwnd, "Erreur lors de l'importation de la taille de la carte (mauvaise taille!), abandon", "Importer", MB_OK|MB_ICONEXCLAMATION); //sortir break; } //mettre le pointeur au début du fichier fseek (marfpt, 0, SEEK_SET); //lire données de 1 octet increment fois dans le fichier marfpt et le sauvegarder dans mappt if ((signed)fread (mappt, 1, increment, marfpt)!=increment) { //fermer le fichier fclose (marfpt); MessageBox (hwnd, "Erreur lors de l'importation de la taille de la map", "Importer", MB_OK|MB_ICONEXCLAMATION); //sortir break; } fclose (marfpt); } else { //suivant la réponse de l'utilisateur if (MessageBox (hwnd, "Créer de nouveaux blocks à partir des graphiques importés?", "Importer", MB_YESNO|MB_ICONQUESTION)==IDYES) increment=-1; else increment=0; if (increment==0) if (MessageBox (hwnd, "Remplacer les graphiques existants?", "Importer", MB_YESNO|MB_ICONQUESTION)==IDYES) numblockgfx = 1; //définir le curseur sauvegardeHandleCurseur = SetCursor(LoadCursor(NULL, IDC_WAIT)); if (IMImportBlocks (szFile, increment)) MessageBox (hwnd, "Une erreur s'est produite lors de l'importation des blocks, regardez le fichier d'aide à la section importation\n" "Faute généralement commise:\nLe fichier BMP est compressé\nLe fichier BMP n'a pas le bon nombre de couleur", "Importer", MB_OK|MB_ICONEXCLAMATION); //definir le curseur SetCursor (sauvegardeHandleCurseur); Rejig (); } } carteModifiee = 1; InvalidateAll (); break;
c'est assez énorme, non ?
et en plus ça fout un bordel monstre en post !
[edit]--Message édité par Moustaaki--[/edit]