Boites de dialogues type "enregistrer sous"

Résolu
FleX2009 Messages postés 22 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 5 mai 2005 - 9 janv. 2005 à 01:52
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.

9 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 janv. 2005 à 10:46
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++
3
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
9 janv. 2005 à 20:00
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!! :-))
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 janv. 2005 à 22:31
Faut linker avec Comdlg32.lib
#prama comment(lib, "Comdlg32.lib")

mais jamais copier une lib dans son dossier.

ciao...
BruNews, MVP VC++
3
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
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...
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
FleX2009 Messages postés 22 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 5 mai 2005
9 janv. 2005 à 22:18
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...
0
FleX2009 Messages postés 22 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 5 mai 2005
9 janv. 2005 à 23:39
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...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 janv. 2005 à 23:47
char chemin; NE FAIT QUE 1 SEUL OCTET !!!
char chemin[MAX_PATH];
faudrait ouvrir un bouquin de C aussi.

ciao...
BruNews, MVP VC++
0
FleX2009 Messages postés 22 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 5 mai 2005
10 janv. 2005 à 00:19
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?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 janv. 2005 à 00:33
Un exemple ici:
http://www.cppfrance.com/code.aspx?ID=28655

ciao...
BruNews, MVP VC++
0
Rejoignez-nous