PopFileOpenDlg - nur pfad an andere klasse übergeben
-
hi, ich hänge mal wieder. ich habe versucht eine standard open file dialogbox zu implementieren. was ich brauche ist einfach nur den pfad der datei, damit ich diesen in meiner gl-klasse so beutzen kann:
TextureImageHead=LoadBMP("hier dann der pfad");
mein problem liegt glaube ich in der korrekten übergabe zur gl-klasse... was genau muss ich übergeben, doch schon das hFile, oder? vor allem steht da dann aber doch mehr drin wie nur der pfad?! bin offen für ideen, denn wenn ich das hFile in meiner gl-klasse eintrage kommmt: udeclared identifier ... wie bekomme ich das hin, dass es angenommen wird...
Hier der Aufruf:
LRESULT CALLBACK WndProc( HWND hWnd, // Handle For This Window UINT uMsg, // Message For This Window WPARAM wParam, // Additional Message Information LPARAM lParam) // Additional Message Information { HMENU hMenu; POINT point; switch (uMsg) // Check For Windows Messages { case WM_CREATE : PopFileInitialize (hWnd); // Initialisierung return 0 ; case WM_COMMAND: hMenu=GetMenu(hWnd); switch (LOWORD (wParam)) { case ID_MESH_HEAD: PopFileOpenDlg (hWnd, lpstrDateiname, NULL); hFile = CreateFile(ofn.lpstrFile ,GENERIC_READ, 0, (LPSECURITY_ATTRIBUTES) NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL); //NUN SOLL IN DER GL-KLASSE NUN IN DER FUNKTION void INITGL() DER AUFRUF //TextureImageHead=LoadBMP("Data/REF/head1.bmp"); ANSTELLE DES STRINGS MIT DEM //PFAD AUS DEM POPFILEDIALOG GEFÜTTERT WERDEN, ANSCHLIESSEN ERNEUTER AUFRUF DER //INITGL break;die funktion:
// Den "Öffnen" Dialog anzeigen und das Handle zum File zurückliefern 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); }und deren Initialisierung:
// Initialisierung der OPENFILENAME-Struktur void PopFileInitialize (HWND hwnd) { // welche Dateitypen sollen ausgewählt werden können static TCHAR szFilter[] = TEXT ("Alle Dateien (*.*)\0*.*\0"); static char path[MAX_PATH]={""}; ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof (OPENFILENAME); ofn.hwndOwner = hwnd; ofn.hInstance = NULL; ofn.lpstrFilter = szFilter; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; ofn.nFilterIndex = 0; ofn.lpstrFile = path; // Bei Öffnen bzw. Schließen gesetzt ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = NULL; // Bei Öffnen bzw. Schließen gesetzt ofn.nMaxFileTitle = 0; ofn.lpstrInitialDir = NULL; ofn.lpstrTitle = NULL; ofn.Flags = 0; // Bei Öffnen bzw. Schließen gesetzt ofn.nFileOffset = 0; ofn.nFileExtension = 0; ofn.lpstrDefExt = TEXT ("obj"); ofn.lCustData = 0L; ofn.lpfnHook = NULL; ofn.lpTemplateName = NULL; }geetz & thnx
-
ja und was ist jetzt dein problem? du hast doch den datei pfad. wenn du deiner LoadBMP funktion ein datei handle übergeben willst, dann schreib sie halt um

-
kann ich nicht einfach das handle irgendwie in einen string wandeln, so dass ich diesen string als variable meiner gl-klasse übergeben kann?
weiss nicht genau, wie du das meinst, die Funktion umzuschreiben, dass sie ein handle annimmt... dies ist die funktionAUX_RGBImageRec* GL::LoadBMP(char *Filename) // Loads A Bitmap Image { FILE *File=NULL; // File Handle if (!Filename) // Make Sure A Filename Was Given { return NULL; // If Not Return NULL } File=fopen(Filename, "r"); // Check To See If The File Exists if (File) // Does The File Exist? { fclose(File); // Close The Handle return auxDIBImageLoad(Filename); // Load The Bitmap And Return A Pointer } return NULL; // If Load Failed Return NULL }bin dankbar für einen tip

-
wieso übergibst du der funktion denn nicht einfach ofn.lpstrFile? Das ist doch schon der pfad zur datei.
