Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1192 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  MFC : CFileDialog

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

MFC : CFileDialog

n°1377239
gee
Bon ben hon
Posté le 30-05-2006 à 10:09:24  profilanswer
 

Salut la suite du problème :
 
j'ai un assert avec un CFileDialog sur un problème de ressource (ASSERT(afxCurrentResourceHandle != NULL)).
J'ai cherché un peu et  
CWnd* mainWnd = AfxGetMainWnd(); me donne quelque chose d'indéfini, en rentrant dans AfxGetMainWnd(), je me rend compte que CWinThread* pThread = AfxGetThread(); me donne aussi quelque chose d'indéfini.
 
Je crée mon CFileDialog ainsi :  
 
CFileDialog fileDlg (TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST, strFilter, mainWnd );
strFilter étant un Cstring pour le filtre ..
 
Si vous avez une idée je vous remercie bien.
 
l'ancien :  
------------------------------------------------------------------------------
Salut,
j'ai une application win32 MFC sur laquelle j'ai ajouté un CFileDialog.
Mon problème est que suivant la taille des noms de fichiers donnés, parfois il y a tronquage, et donc le fichier ne peut pas être ouvert ...
Y'a-t il une limite différente entre ce que "permet" Windows et ce qu'accepte les MFC ?
 
Merci bien @VS2003


Message édité par gee le 06-06-2006 à 15:07:12
mood
Publicité
Posté le 30-05-2006 à 10:09:24  profilanswer
 

n°1378501
gee
Bon ben hon
Posté le 01-06-2006 à 00:07:11  profilanswer
 

up

n°1378785
Trap D
Posté le 01-06-2006 à 13:11:12  profilanswer
 

Tronquage, c'est-à-dire ? quel est exactement le problème ?
CFileDialog n'est qu'une encapsulation de OpenFileDialog je crois, donc il n''y a aucune raison qu'il y ait un changement.

n°1378795
gee
Bon ben hon
Posté le 01-06-2006 à 13:25:56  profilanswer
 

Bah mon nom de fichier passe par exemple de  
 
monnomdefichierquiesttroplong.monextension
à
monnomdefich
 
bon bien sûr là il y a mois de char mais c'est pour l'exemple.
 
Merci

n°1380073
gee
Bon ben hon
Posté le 02-06-2006 à 16:58:35  profilanswer
 

up

n°1380370
slash33
Posté le 03-06-2006 à 11:46:05  profilanswer
 

Ah oui ça m'est arrivé aussi pour la sélection multiple
 
Je réponds de tête.
 
il faut changer le buffer destiné à recevoir les fichiers sélectionnés. Ca se passe dans la structure publique CFileDialog::m_ofn. C'est un OPENFILENAME de l'API Win 32.
 
Dans la structure OPENFILENAME, il me semble qu'il faut changer la valeur des champs :
 

Citation :

lpstrFileTitle
    Pointer to a buffer that receives the file name and extension (without path information) of the selected file. This member can be NULL.
 
nMaxFileTitle
    Specifies the size, in TCHARs, of the buffer pointed to by lpstrFileTitle. For the ANSI version, this is the number of bytes; for the Unicode version, this is the number of characters. This member is ignored if lpstrFileTitle is NULL.


 
Par défaut le buffer fait _MAX_PATH de longueur.


Message édité par slash33 le 03-06-2006 à 11:52:11
n°1380397
gee
Bon ben hon
Posté le 03-06-2006 à 12:31:45  profilanswer
 

Merci je regarderai cela lundi.
Sinon hier j'ai cherché un peu autour de cela, car en mode debug j'ai un assert sur le CFILEdialog. Je ne sais pas pourquoi l'assert me parle d'une erreur dans un fichier sur le f:\XXX\YYY\, j'ai bien un f:\ mais il est vide ...
 
En regardant un peu ca vient d'un test sur m_ofn, là je ne sais plus exactement lequel. Après avoir fait quelques recherches j'ai vu que ca pouvait se régler en changeant le 'linkage' des MFC, oui mais si je fais cela je me retrouve avec des erreurs comme quoi new ete delete ont déjà été déclarés .... alors pour contrer cela j'essayer de bouger le include d'afx, mais alors j'ai une autre erreur impossible d'utiliser un MFC quand windows.h a été inclus ... (c'est un projet DX9).
 
Je précise que le partie affichage n'est pas mienne de base mais celle d'un collègue, qu'il a lui même récupéré du travail d'un ancien stagiaire qui ne fonctionnait pas trop, donc en gros il a fait des "patchs", et je fais pareil là mais sans trop savoir à quoi on touche ..
 
Merci,

n°1380671
slash33
Posté le 04-06-2006 à 00:19:11  profilanswer
 

Désolé. Je ne peux pas en dire davantage.
 
Il faudrait présenter une trace de debugage pour déterminer l'origine de l'exception. J'ai, fort heureusement, eu aucune difficulté majeure avec le CFileDialog. Mais je développe que des applications full MFC. Ceci explique peut être cela.
 
Les problèmes d'inclusion/exclusion de prototype WIN32 et MFC est un problème complexe. Pareil pour l'édition de liens.
 
Ah oui j'ai oublié de préciser : VS 6.0 et MFC 5.2. Y a peut être un problème avec VS 2003 qui sait...


Message édité par slash33 le 04-06-2006 à 00:25:45
n°1380686
gee
Bon ben hon
Posté le 04-06-2006 à 02:17:20  profilanswer
 

merci tout de même :jap:

n°1381387
gee
Bon ben hon
Posté le 05-06-2006 à 15:42:33  profilanswer
 

bon je suis en train de regarder là, c'est bien intéressant ce que tu m'as écrit.
 
lpstrFile est bon, mais lpstrFileTitle est tronqué.
J'ai essayé d'augmenter la taille de nMaxFileTitle avec une affectation mais ca n'a pas l'air d'être la bonne manière car cela ne change rien.
 
Je continue,
merci :jap:

mood
Publicité
Posté le 05-06-2006 à 15:42:33  profilanswer
 

n°1381424
gee
Bon ben hon
Posté le 05-06-2006 à 16:27:54  profilanswer
 

je m'en suis sorti avec :  

Code :
  1. CString strFilter = "DYN Files (*.dyn)|*.dyn|All Files (*.*)|*.*||";
  2. CFileDialog fileDlg (TRUE, NULL, NULL,  NULL, strFilter, NULL);
  3. char szOpenMRSFileTitle[128+1];
  4. fileDlg.m_pOFN->lpstrFileTitle = szOpenMRSFileTitle;
  5. fileDlg.m_pOFN->nMaxFileTitle = sizeof(szOpenMRSFileTitle);


 
Merci bien pour ton aide

n°1382114
gee
Bon ben hon
Posté le 06-06-2006 à 15:07:24  profilanswer
 

je up pour la suite du problème :jap:

n°1382194
gee
Bon ben hon
Posté le 06-06-2006 à 16:21:05  profilanswer
 

Bon je m'en suis sorti avec un getopenfilename finalement, les MFC c'est pas mon truc on dirait ..

n°1385175
slash33
Posté le 10-06-2006 à 17:48:33  profilanswer
 

Bon j'arrive trop tard on dirait...

n°1385672
gee
Bon ben hon
Posté le 12-06-2006 à 11:29:58  profilanswer
 

Salut,
ben nan pas trop tard j'ai encore une question :)
 
Dans le programme souvent on met des path relatifs par rapport au 1er repertoire du programme. Mais quand j'utilise mon openfile, et bien quelque part il change le repertoire racine, et donc tout les autres file open ne fonctionne plus.
en gros après au lieu d'avoir
racine = \monprogramme
j'ai racine = \moinprogramme\repertoiredufichierouvertparopenfilename.
 
Si tu as une idée je suis preneur :)

n°1385695
gee
Bon ben hon
Posté le 12-06-2006 à 11:56:18  profilanswer
 

résolu avec :  
[code]
char dirname[256];
GetCurrentDirectory(sizeof(dirname), dirname);
st.lpstrInitialDir = dirname;
 
puis avant mon parse
SetCurrentDirectory(dirname);
:hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  MFC : CFileDialog

 

Sujets relatifs
[MFC] Problème Port Socket[Résolu] Problème Programmation MFC
fermeture d'un programme - MFC - debutantMFC/C++ : creation d'une image et enregistrement
Appeler une DLL C++/MFC à partir d'un code C#[MFC et ODBC] Requete SQL
Addresse IP avec une application MFCcomment fusionner 2 projets (MFC)
[MFC] CFileDialog qui me retourne -1 ?! Comprend pas bien...[VC++ / MFC] CFileDialog
Plus de sujets relatifs à : MFC : CFileDialog


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR