[C] Dateiwahl und String-Requester unter Windows

Cusco

Erfahrenes Mitglied
Hi,

die Grundfunktionen von meinen Windows-Konsolen-Programm stehen, nun suche ich, eine Möglichkeit einer Verzeichniswahl, ein Dateiauswahl zum Lesen und schreiben und Einen kleinen Requester in dem man einen Text eingeben kann, beim Stringrequester stelle ich mir ein Fenster mit einen einzeiligen Eingabefeld und ok-Button evt. auch noch Abbruch-Button vor. Auf den Amiga gibt es dafür alles systemfunktionen unter der Reqtools.library und teilweise in der OS-Asl.library, ich denke das Windows das auch alles hat, von einer Verzeichnis und Dateiwahl, weiss ich natürlich schon das es das gibt, ein Stringrequester wie ich ihn mir Vorstelle habe ich auch schon bei 2-3 Programmen gesehen, nur weiss ich nicht ob der von denen Programmiert oder es eine Systemfunktion darstellt.

Es wäre schön wenn einer von euch gleich mit einen Beispiel helfen würde :)
 
Kann mir denn einer wenigstens einen Hinweis geben wie das geht? Ich habe bis her nur die funktion CFileDialog gefunden, aber die scheint es nur für Visual C++ zu geben :(
 
OK ich habe in mein schlaues Buch geschaut und was gefunden, nur leider wird der Code nicht näher beschrieben er ist bestandteil eines TextEditor-Demos

Da habe ich mir nun folgenen Code rausgekramt, nur leider fUnkltioniert er nicht es wird immer 0 zurückgegeben und der Requester erscheint erst gar nicht :(

Code:
#include <windows.h>
#include <commdlg.h>
#include <stdio.h>

OPENFILENAME ofn;
void PopFileInitialize (HWND hwnd)
{
     static TCHAR szFilter[] = TEXT ("Textdateien (*.TXT)\0*.txt\0")  \
                               TEXT ("HTML-Dateien (*.HTM)\0*.htm\0") \
                               TEXT ("HTML-Dateien (*.HTML)\0*.html\0") \
                               TEXT ("Alle Dateien (*.*)\0*.*\0\0") ;
     
     ofn.lStructSize       = sizeof (OPENFILENAME) ;
     ofn.hwndOwner         = hwnd ;
     ofn.hInstance         = NULL ;
     ofn.lpstrFilter       = szFilter ;
     ofn.lpstrCustomFilter = NULL ;
     ofn.nMaxCustFilter    = 0 ;
     ofn.nFilterIndex      = 0 ;
     ofn.lpstrFile         = NULL ;          // Bei Öffnen bzw. Schließen gesetzt
     ofn.nMaxFile          = MAX_PATH ;
     ofn.lpstrFileTitle    = NULL ;          // Bei Öffnen bzw. Schließen gesetzt
     ofn.nMaxFileTitle     = MAX_PATH ;
     ofn.lpstrInitialDir   = NULL ;
     ofn.lpstrTitle        = NULL ;
     ofn.Flags             = 0 ;             // Bei Öffnen bzw. Schließen gesetzt
     ofn.nFileOffset       = 0 ;
     ofn.nFileExtension    = 0 ;
     ofn.lpstrDefExt       = TEXT ("txt") ;
     ofn.lCustData         = 0L ;
     ofn.lpfnHook          = NULL ;
     ofn.lpTemplateName    = NULL ;
}

BOOL PopFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
{
     ofn.hwndOwner         = hwnd ;
     ofn.lpstrFile         = pstrFileName ;
     ofn.lpstrFileTitle    = pstrTitleName ;
     ofn.Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
     
     return GetOpenFileName (&ofn) ;
}

BOOL PopFileSaveDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
{
     ofn.hwndOwner         = hwnd ;
     ofn.lpstrFile         = pstrFileName ;
     ofn.lpstrFileTitle    = pstrTitleName ;
     ofn.Flags             = OFN_OVERWRITEPROMPT ;
     
     return GetSaveFileName (&ofn) ;
}

void LetzterFehler(const TCHAR *Text)	
 {int Fehler = GetLastError();
  if(Fehler != ERROR_SUCCESS)
  {printf(TEXT("Fehler in '%s' Code %i\n"),Text,Fehler);
   SetLastError(ERROR_SUCCESS);}}

void main(void)
{
   TCHAR FileName[MAX_PATH] = TEXT("Test.html");
   TCHAR TitelName[]=TEXT("Open");
   HWND hwnd;
   int ok;
   PopFileInitialize (hwnd);
   ok=PopFileOpenDlg (hwnd,FileName,TitelName); 
   LetzterFehler(TEXT("opFileOpenDlg"));
   if(ok)
   {printf("ok :-) File = '%s'\n",FileName);}
   else
   {printf("Fehler :-(\n\a");}
}
 
Zurück