Dateiauswahl (FileDialog)

Hallasas

Erfahrenes Mitglied
Hallo.
Ich möchte gerne einen "FileDialog" nach einem Buttonklick initiieren. Der Buttonklick ist kein Problem ( BN_CLICKED ).
Wenn möglich auch mit Filter ?
Ich arbeite mit der Win API und habe leider nur Themen zu Visual Basic und Visual C++ (Forms) gefunden.... :(

Hoffe, ihr könnt mir helfen.
Gruß Hallasas
 
Mit der Win32 API heissen die beiden Funktionen GetOpenFilename und GetSaveFilename. Du mußt da ein recht komplexes OPENFILENAMESTRUCT füllen, nicht vergessen, das vorher komplett auf 0 zu setzen.
Die File-Dialoge reagieren recht wackelig auf ungültige Daten.
 
Vielen Dank für deine Antwort, Endurion.
Doch leider funktioniert das noch nicht so richtig...
Ich habe dies "zusammen gebaut":
Code:
char filepath[MAX_PATH];

OPENFILENAME             file;
file.lStructSize       = sizeof ( OPENFILENAME );
file.hwndOwner         = hwnd;
file.hInstance         = ((LPCREATESTRUCT) lParam) -> hInstance;
file.lpstrFilter       = "All Files\0*.*\0\0";
file.lpstrCustomFilter = NULL;
file.nMaxCustFilter    = _T(50);
file.nFilterIndex      = NULL;
file.lpstrFile         = filepath;
file.nMaxFile          = _T(50);
file.lpstrFileTitle    = NULL;
file.nMaxFileTitle     = NULL;
file.lpstrInitialDir   = NULL;
file.lpstrTitle        = NULL;
file.Flags             = OFN_ALLOWMULTISELECT;
file.nFileOffset       = _T(50);
file.nFileExtension    = _T(50);
file.lpstrDefExt       = NULL;
file.lCustData         = NULL;
file.lpfnHook          = 0;
file.lpTemplateName    = 0;

case VK_F1:
{
    GetOpenFileName( &file );
}
Kompilieren gibt auch keine Probleme, doch nachdem ich das Programm ausgeführt habe, und F1 drücke ( WM_KEYDOWN ), kommt die Fehlermeldung:
Code:
Programm.exe funktioniert nicht mehr richtig...
Und dann ist es aus :(

Mache ich etwas falsch ? Ich denke schon... ...aber hoffentlich nicht zu viel.

Gruß Hallasas
 
So müßte das eigentlich reichen:

Code:
OPENFILENAME	ofn;

	memset(&ofn,0,sizeof(OPENFILENAME));
	ofn.lStructSize = sizeof(OPENFILENAME);
	ofn.hwndOwner = hwnd;
	ofn.lpstrFile = szFileName;
	ofn.nMaxFile = MAX_PATH;
	ofn.lpstrTitle = "Choose a file";
	ofn.lpstrDefExt = "sql";
	ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;

	GetOpenFileName(&ofn);
 
Hallo,

ich bin auf dieses Thema gestoßen und habe noch die ein oder offene Frage.

Ich arbeite unter Visual Studio 2008 mit C++ und habe ein QWidget mit u.a. einem Knopf. Beim Klicken (SIGNAL(clicked()) wird eine Funktion loadFile() aufgerufen, die mir einen File Dialog öffnen soll.

Ich habe die Windows.h eingebunden. Doch leider bekomm ich beim verwenden des oben stehenden Codes folgende Fehlermeldung:

1>.\src\ivusSegmentation.cpp(49) : error C2065: 'hwnd' : undeclared identifier
1>.\src\ivusSegmentation.cpp(50) : error C2065: 'szFileName' : undeclared identifier
1>.\src\ivusSegmentation.cpp(52) : error C2440: '=' : cannot convert from 'const char [14]' to 'LPCWSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>.\src\ivusSegmentation.cpp(53) : error C2440: '=' : cannot convert from 'const char [4]' to 'LPCWSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Kann mir vllt jemand weiterhelfen!?
Vielen Dank schonmal!
 
Du musst die Parameter deiner Anwendung entsprechend anpassen. hwnd ist ein HWND mit dem Parent des Dialogs. szFileName ist das standardmässig ausgewählte Dateichen.

Aber warum verwendest du nicht die Funktionen von QT um einen solchen Dialog anzuzeigen? Wenn du windowsspezifische Funktionen verwendest ist ja sämtlicher Vorteil von QT weg und du bleibst auf den Nachteilen sitzen.
 
Zurück