Boites de dialogues type "enregistrer sous" [Résolu]

Messages postés
22
Date d'inscription
mercredi 15 décembre 2004
Statut
Membre
Dernière intervention
5 mai 2005
- - Dernière réponse : FleX2009
Messages postés
22
Date d'inscription
mercredi 15 décembre 2004
Statut
Membre
Dernière intervention
5 mai 2005
- 10 janv. 2005 à 02:20
Bonjour, étant vraiment un newbie en C/C++, j'ai un petit problème :

j'ai utilisé le tutorial de xbdev (à l'adresse :
http://www.xbdev.net/3dformats/milkshape_exporter/index.php) pour créer
une DLL plug-in pour MilkShape (soft de 3d).



Seulement, cette DLL n'enregistre que sur un fichier spécifique
(c:\raw.txt). Et j'aimerais à la place de cela avoir une fenêtre type
"enregistrer sous/ ouvrir etc." (common controls à ce que j'ai
entendu) qui s'ouvre pour demander l'emplacement.



Je suis sous VC++ TOOLKIT 2003 car il était écrit de compiler la DLL
avec ce soft, et que je compile mon .cpp avec la ligne de commande : cl
/LD maDLL.cpp maDLL.def (car y'a un fichier .def qui sert à
l'exportation des noms des fonctions de la DLL à ce que j'ai compri).



Donc voila, n'importe quelle piste me serai d'une très grande utilité.



Une derniere chose : j'ai essayé d'utilisé commctrl.h ou commdlg.h de
mon VC++6.0 (qui est aussi installé) mais ca me pond des erreurs de
compilation.



Merci d'avance pour votre aide.
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
3
Merci
Regarde GetSaveFileName() dans MSDN qi se trouve ici:
http://www.msdn.microsoft.com/library/default.asp
et il y en a certainement des exemples dans les sources de ce site.

ciao...
BruNews, MVP VC++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 207 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
3
Merci
void GetName(char* szDepot) {

OPENFILENAME ofn
ZeroMemory(ofn, sizeof(OPENFILENAME));

ZeroMemory(szDepot, sizeof(szDepot));

ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hDlg; // fenêtre parente
ofn.hInstance = (HINSTANCE) GetModuleHandle(0);
ofn.lpstrFilter = "Ton type de fichier (*.lol)\0*.lol\0Tous les fichiers (*.*)\0*.*\0\0";
ofn.lpstrFile = szDepot;
ofn.nMaxFile = sizeof(szDepot);
ofn.lpstrTitle = "Enregistrer là ! ^^"; // uniquement si tu souhaites le modif

// ofn.lpstrFileTitle; (optionnel)
// ofn.nMaxFileTitle; (optionnel)

ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXISTS | OFN_HIDEREADONLY

GetSaveFileName(&ofn);
}

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 207 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Gendal67
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
3
Merci
Faut linker avec Comdlg32.lib
#prama comment(lib, "Comdlg32.lib")

mais jamais copier une lib dans son dossier.

ciao...
BruNews, MVP VC++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 207 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
22
Date d'inscription
mercredi 15 décembre 2004
Statut
Membre
Dernière intervention
5 mai 2005
3
Merci
Wouah! Il est dur ton exemple lol ^^

Mais c'est bon, j'ai enfin reussit en fait il y avait une erreur dans
une des varible je pense. Car pour faire fonctionner, j'ai tout
simplement tout recodé mais plus dans une fonction mais directement
dans le code principale.



Donc ca donne :



OPENFILENAME ofn;

FILE *file;

char filename[MAX_PATH] = "";

ZeroMemory(&ofn, sizeof(ofn));

ofn.lStructSize = sizeof(ofn);

ofn.hwndOwner = NULL;

ofn.lpstrTitle = "Enregistrer sous...";



ofn.lpstrFilter = "SR Model (*.srm)\0*.srm\0Tous les fichiers
(*.*)\0*.*\0\0";

ofn.lpstrFile = filename;

ofn.nMaxFile = MAX_PATH;

ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY;

ofn.lpstrDefExt = "smc";



if(GetSaveFileName(&ofn)) file = fopen(filename, "wt+");



PS: je n'avais pas compri tout a l'heure que MAX_PATH était une constante des common controls...



En tout cas, je vous remercie infiniment de votre aide, vous m'avais sauvé un temps précieu...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 207 internautes nous ont dit merci ce mois-ci

Commenter la réponse de FleX2009
Messages postés
22
Date d'inscription
mercredi 15 décembre 2004
Statut
Membre
Dernière intervention
5 mai 2005
0
Merci
Merci beaucoup d'essayer de m'aider.



Apres quelque modif de ce que tu ma filé (manques de point-virgule) c'est à dire avec cela :



void GetName(char *szDepot) {



OPENFILENAME ofn;

ZeroMemory(&ofn, sizeof(OPENFILENAME));



ZeroMemory(szDepot, sizeof(szDepot));



ofn.lStructSize = sizeof(ofn);

ofn.hwndOwner = NULL;//hDlg; // fenêtre parente

ofn.hInstance = (HINSTANCE) GetModuleHandle(0);

ofn.lpstrFilter = "Ton type de fichier (*.lol)\0*.lol\0Tous les fichiers (*.*)\0*.*\0\0";

ofn.lpstrFile = szDepot;

ofn.nMaxFile = sizeof(szDepot);

ofn.lpstrTitle = "Enregistrer là ! ^^"; // uniquement si tu souhaites le modif



// ofn.lpstrFileTitle; (optionnel)

// ofn.nMaxFileTitle; (optionnel)



ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY; //OFN_PATHMUSTEXISTS |



GetSaveFileName(&ofn);

}



j'obtient une erreur de "linking", mais pourant d'après le document
vers lequel ma renvoyé BruNews, j'ai inclu Windows.h (j'ai même ensuite
inclu Comdlg32.h et mit dans mon repertoire comdlg32.lib). Voici
l'erreur :



Creating library msSelfish.lib and object msSelfish.exp

msSelfish.obj : error LNK2019: unresolved external symbol _GetSaveFileNameA@4 re

ferenced in function "void __cdecl GetName(char *)" (?GetName@@YAXPAD@Z)

msSelfish.dll : fatal error LNK1120: 1 unresolved externals







Comme je le disais, je suis vraiment
faible en C++, donc si tu pouvais m'aider ou quelqu'un d'autre pouvait
m'aider ca serai génial...



Merci d'avance...
Commenter la réponse de FleX2009
Messages postés
22
Date d'inscription
mercredi 15 décembre 2004
Statut
Membre
Dernière intervention
5 mai 2005
0
Merci
Je ne sais pas comment vous remerciez vous deux, j'en ai limite les larmes à l'oeil.

Ca marche enfin! Enfin presque...



La boite de dialogue s'ouvre, mais lorsque je fait enregistre, que je
recupere le chemin, et que je crée un fichier, celui-ci se retrouve
bien dans le bon répertoire mais son nom devient un seul charactère au
"hasard" (sans doute un char non affecté?). En fait je pense que cela
vient de ma conversion du pointeur vers char en tableau de char :



char Chemin;

GetName(&Chemin);



char Chemin2[sizeof(Chemin)];



strcpy(Chemin2, &Chemin);

FILE *file = fopen (Chemin2, "wt+");



Si vous me trouvez une solution pour ca aussi, je vous promer de ne plus vous ennuyer...

encore une fois merci d'avance...
Commenter la réponse de FleX2009
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
0
Merci
char chemin; NE FAIT QUE 1 SEUL OCTET !!!
char chemin[MAX_PATH];
faudrait ouvrir un bouquin de C aussi.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
22
Date d'inscription
mercredi 15 décembre 2004
Statut
Membre
Dernière intervention
5 mai 2005
0
Merci
Oui c'est vraie que je suis une grosse loose en C. J'ai juste lu
quelque tuto. En fait je suis habitué au Pascal/Delphi donc j'ai
vraiment du mal.



Sinon pour revenir au char, j'ai changé mon code :



char Chemin[200];

GetName(Chemin);

FILE *file = fopen (Chemin, "wt+");



Mais j'ai toujours la même erreur, c'est-à-dire que le fichier que
j'enregistre est dans le bon répertoire mais son nom n'est composé que
d'un char "au hasard"...



Vous voyez d'où ça peut venir?
Commenter la réponse de FleX2009
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
0
Merci
Un exemple ici:
http://www.cppfrance.com/code.aspx?ID=28655

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews