Ouvrir un fichier, quelles solutions?

Ouvrir un fichier, quelles solutions? - C++ - Programmation

Marsh Posté le 16-08-2010 à 14:52:36    

Salut à tous,
Je débute en c++, et j'aimerais savoir comment créer une boite de dialogue pour ouvrir un fichier (comme si on faisait Fichier->Ouvrir)
J'ai déjà chercher sur le forum mais j'ai rien trouvé...
Merci d'avance!


---------------
cpu: Intel E8500 @ 4.4Ghz, gpu: Crossfire HD4870 Vapor-X, mob: Asus P5E64 WS Evolution, ram: 6Go DDR3 PC10600, alm: 650W, dd: 5250 GO, box: Corsair Obsidian 800D, OS: Windows 7 Pro x64
Reply

Marsh Posté le 16-08-2010 à 14:52:36   

Reply

Marsh Posté le 16-08-2010 à 17:16:31    

scarecrows'nox a écrit :

Salut à tous,
Je débute en c++, et j'aimerais savoir comment créer une boite de dialogue pour ouvrir un fichier (comme si on faisait Fichier->Ouvrir)
J'ai déjà chercher sur le forum mais j'ai rien trouvé...
Merci d'avance!


 
Ouch, tu débutes en C++ et tu veux t'attaquer à l'API Win32 ? Va t'en falloir de la motivation. À tout hasard regarde la fonction GetOpenFileName. Tu va devoir remplir une structure OPENFILENAME. Il n'y a pas besoin de créer de boite de dialogue pour utiliser cette fonction. Si tu veux une fenêtre avec quelques contrôles, ça va devenir très très gore....

Reply

Marsh Posté le 16-08-2010 à 17:48:04    

Reply

Marsh Posté le 16-08-2010 à 18:12:38    

ouvrir ce genre de boite de dialogue ne se fait pas nécessairement en Win32. Il faudrait déjà voir si tu as un toolkit que tu utilises pour faire ton interface.


---------------
last.fm
Reply

Marsh Posté le 17-08-2010 à 09:32:42    

Merci à vous,  
Alors je ne peux pas utiliser de lib tierce comme Qt ou WxWidgets (je me suis renseigné un peu quand mm!!).
Ensuite tperrion il faut include quoi comme lib pour ca?


---------------
cpu: Intel E8500 @ 4.4Ghz, gpu: Crossfire HD4870 Vapor-X, mob: Asus P5E64 WS Evolution, ram: 6Go DDR3 PC10600, alm: 650W, dd: 5250 GO, box: Corsair Obsidian 800D, OS: Windows 7 Pro x64
Reply

Marsh Posté le 17-08-2010 à 14:45:50    

scarecrows'nox a écrit :

Merci à vous,
Alors je ne peux pas utiliser de lib tierce comme Qt ou WxWidgets (je me suis renseigné un peu quand mm!!).
Ensuite tperrion il faut include quoi comme lib pour ca?

 

Ouch, il ne reste donc que l'API Win32 (on va éviter les MFC). GetOpenFileName() est définie dans "windows.h". Il faut ajouter la lib "comdlg32" dans l'édition des liens. Ça c'est un exemple classique d'utilisation (faudra lire la doc pour le détail...):

 
Code :
  1. #include <windows.h>
  2. #include <stdio.h>
  3.  
  4. int WINAPI WinMain (HINSTANCE hThisInstance,
  5.                    HINSTANCE hPrevInstance,
  6.                    LPSTR lpszArgument,
  7.                    int nFunsterStil)
  8. {
  9.     OPENFILENAME ofn = {}; // common dialog box structure
  10.     char szFile[260]; // buffer for file name
  11.  
  12.     ofn.lStructSize = sizeof(ofn);
  13.     ofn.lpstrFile = szFile;
  14.  
  15.     //
  16.     // Set lpstrFile[0] to '\0' so that GetOpenFileName does not
  17.     // use the contents of szFile to initialize itself.
  18.     //
  19.     ofn.lpstrFile[0] = '\0';
  20.     ofn.nMaxFile = sizeof(szFile);
  21.     ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
  22.     ofn.nFilterIndex = 1;
  23.     ofn.lpstrFileTitle = NULL;
  24.     ofn.nMaxFileTitle = 0;
  25.     ofn.lpstrInitialDir = NULL;
  26.     ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
  27.  
  28.     // Display the Open dialog box.
  29.     if (GetOpenFileName(&ofn))
  30.     {
  31.         fprintf(stderr, "fichier = %s\n",ofn.lpstrFile);
  32.     }
  33.  
  34.     return 0;
  35. }


Message édité par tpierron le 17-08-2010 à 14:46:47
Reply

Marsh Posté le 17-08-2010 à 16:45:44    

Nickel tpierron ca marche nickel!!
Maintenant me reste plus qu'a finir mon soft!!


---------------
cpu: Intel E8500 @ 4.4Ghz, gpu: Crossfire HD4870 Vapor-X, mob: Asus P5E64 WS Evolution, ram: 6Go DDR3 PC10600, alm: 650W, dd: 5250 GO, box: Corsair Obsidian 800D, OS: Windows 7 Pro x64
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed