OVH Cloud OVH Cloud

common dialog box : save

2 réponses
Avatar
Nicolas aunai
salut,

j'ai un petit problème avec une boite de dialogue pour enregistrer un
fichier :(
le truc c'est que mon programme se gèle dès que je commence a taper le nom
du fichier dans la zone edit !

je tape deux lettres et BLAM

ce qui est incompréhensible c'est que ça le fait pas tout le temps, par
exemple là j'ai 3 fichiers dans le dossier, ça plante... je les vire,
retente, et ça plante pas :/

je pige que dale

d'un autre coté j'ai dans mon programme un bouton pour ouvrir une autre
boite de dialogue, cette fois ci pour ouvrir des fichiers..

si j'ai le malheur d'avoir cliqué sur 'save' avant, dès que je clique sur
'open' mon programme se ferme...
si j'ai le malheur d'avoir cliqué sur 'open' avant 'save' mon programme se
ferme...
si après avoir sauvé un fichier (si ça a pas planté), et que je reclique sur
'save' ça se ferme
si je clique de la même façon deux fois sur 'open' ça se ferme tout
pareil...

je dois avoir un problème dans mes boites de dialogues mais je vois pas
lequel...
je vous joint donc mes deux fonctions open et save, ainsi que la partie de
la DialogFunc qui s'occupe des deux boutons...


char *DialogBoxSave(HANDLE DlgBox)
{

OPENFILENAME ofn;
char filename[256];
char *filepath;

ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = DlgBox;
ofn.lpstrFile = filename;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(filename);
ofn.lpstrFilter = "All\0*.*\0Message Boxes (*.box)\0*.box\0";
ofn.nFilterIndex = 2;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = "my_boxes\\";
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

if (GetSaveFileName(&ofn)==TRUE)
{
filepath=malloc(sizeof(ofn.lpstrFile));
strcpy(filepath,ofn.lpstrFile);
return filepath;
}
else
{
filepath=malloc(sizeof(ofn.lpstrFile));
filepath[0]=0;
return filepath;
}

}

char *DialogBoxOpen(HANDLE DlgBox)
{

OPENFILENAME ofn;
char filename[256];
char *filepath;

ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = DlgBox;
ofn.lpstrFile = filename;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(filename);
ofn.lpstrFilter = "All\0*.*\0Message Boxes (*.box)\0*.box\0";
ofn.nFilterIndex = 2;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = "my_boxes\\";
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;



if (GetOpenFileName(&ofn)==TRUE)
{
filepath=malloc(sizeof(ofn.lpstrFile));
strcpy(filepath,ofn.lpstrFile);
return filepath;
}
else
{
filepath=malloc(sizeof(ofn.lpstrFile));
filepath[0]=0;
return filepath;
}
}

et maintenant dans la DialogFunc :

case ID_OPEN:

strcpy(BoxFilename,DialogBoxOpen(hwndDlg));
if(BoxFilename[0]!=0){
FillMessBoxFile(BoxFilename,hwndDlg);
free(BoxFilename);
}
break;

case ID_SAVEBOX:

BoxFile=FillMessStruct(hwndDlg,combobut,comboico,&fill_error);


strcpy(BoxFilename,DialogBoxSave(hwndDlg));
if(BoxFilename[0]!=0){
SaveMessBox(BoxFile,BoxFilename);
free(BoxFilename);
if(fill_error==MSGFINE)
free(BoxFile);
break;
}


petites précisions :
FillMessBoxFile lit dans le fichier dont le chemin est donné en argument, et
remplis des zones edit de la boite de dialogue dont le handle est donné en
argument.

FillMessStruct est sensée retourner l'adresse d'une structure remplie des
paramètres qu'elle lit dans les différentes zones edit de la boite de
dialogue....

SaveMessBox prend l'adresse d'une structure de paramètres de messagebox,
ainsi que le nom d'un fichier (initialisé par DialogBoxSave) et enregistrer
la structure dans un fichier binaire...

voila, je pense avoir tout dis..



merci si vous pouvez m'aider


--
nico,
http://astrosurf.com/nicoastro
messenger : nicolas_aunai@nospam@hotmail.com

2 réponses

Avatar
Thierry
Bonjour,

Thierry a écrit :

Bonjour,

Nicolas aunai a écrit :

j'ai comme l'impression que ça me jouer un tour, ya pas en C un problème
avec les sizeof des char * ?



sizeof(ce que tu veux *) = 4



En 32bits, oeuf corse (merci Dominique).

--
"Oh God I am the American dream
I do not think I'm too extreme
An' I'm a handsome son of a bitch
I'm gonna get a good job 'n' be real rich"
Avatar
Dominique Vaufreydaz
Bonjour,

Thierry wrote:
Nicolas aunai a écrit :
j'ai comme l'impression que ça me jouer un tour, ya pas en C un problème
avec les sizeof des char * ?


sizeof(ce que tu veux *) = 4



Dans le cas d'un systeme qui utilise un adressage 32 bits, oui.
Pour les nouveaux OS 64 bits, gageons que cette valeur passera
a 8 octets...

Voila, juste pour que les lecteurs ne prennent pas 4 comme une
verite absolue. Toujours utiliser sizeof...

Voila. Doms.
--
Impose ta chance, serre ton bonheur et va vers ton risque.
A te regarder, ils s'habitueront.
René Char, Les Matinaux.
----
http://www-prima.inrialpes.fr/Vaufreydaz/
http://slmg.imag.fr/
http://slmg-index.imag.fr/
http://TitchKaRa.free.fr/
http://logiciels.ntfaqfr.com/