Fehlermeldung bei Öffnen-Dialog (CFileDialog)
-
Hallo,
ich möchte mit diesem Dialog Dateien öffnen, mit dem Stil von XP, bei dem man links die Leiste hat. Funktioniert auch soweit ganz gut, wenn da nicht folgende Fehlermeldung wäre:
http://endzeit.s01.user-portal.com/Fehlermeldung.JPG
Wenn man auf ignorieren clickt funktioniert es trotzalledem, das sieht dann wie folgt aus:
http://endzeit.s01.user-portal.com/Dialog.JPGDer Quellcode dazu ist:
void CBeispiel::OnBTNImport() { CFileDialog fileDialog( true,NULL,NULL,OFN_EXPLORER, "Textdateien (*.txt)|*.txt|" "Alle Dateien (*.*) |*.*||"); CString PfadName; // Formatierungen vornehmen fileDialog.m_ofn.Flags = OFN_EXPLORER; fileDialog.m_ofn.lpstrTitle = "Datei suchen ..."; fileDialog.m_ofn.lpstrInitialDir= m_csQuellpfad; // Filedialog starten und auf OK warten (IDOK) if(IDOK==fileDialog.DoModal()) { PfadName = fileDialog.GetPathName(); // Dateipfad und Name mit Ext } }
Ich wäre sehr dankbar wenn ihr mir dabei weiterhelfen könntet.
-
WINAPI-oder MFC-Forum
Weil, hat nichts mit Standard-C++
-
Sorry, jetz seh ich`s auch, kann man das verschieben wenn ja, wie?
-
Dieser Thread wurde von Moderator/in davie aus dem Forum C++ in das Forum MFC mit dem Visual C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
[Gebetsmühlenmodus an]Das ist KEINE Fehlermeldung.[Gebetsmühlenmodus aus]
Lies doch einfach mal, was da steht. Vielleicht kommst du dann alleine drauf, mal Wiederholen bzw. Retry zu drücken.
Und dann schau den Code an, wo du landest.
Wenn du dann noch nicht weiterkommst, zeig doch mal, wo du gelandet bist.
-
Wenn ich wiederhole kommt ein Ausnahmefehler und das Programm wird beendet.
Wenn ich im Debug-Modus starte kommt die "Fehlermeldung" an der Stelle:int CFileDialog::DoModal() { ASSERT_VALID(this); ---> ASSERT(m_ofn.Flags & OFN_ENABLEHOOK); <---- ASSERT(m_ofn.lpfnHook != NULL); // can still be a user hook // ... }
Aus der Datei dlgfile.cpp
Wenn ich bei der Fehlermeldung ignorieren clicke funktioniert es wie gesagt problemlos. Wie kann ich die Meldung beseitigen?
-
Wie du das beseitigen kannst, sagt dir die Zeile, wo du landest.
Schau bitte mal in die MSDN, was ASSERT ist.
Also:
ASSERT(m_ofn.Flags & OFN_ENABLEHOOK);
Hier wird gemeckert, wenn das Flag OFN_ENABLEHOOK nicht gesetzt wurde. (Warum auch immer...)
Setz das Flag und du hast Ruhe.
Schau aber nochmal nach, was das macht - vielleicht muss du noch mehr machen, als es nur mit OFN_EXPLORER verodern.
-
Wenn ich schreibe:
fileDialog.m_ofn.Flags = OFN_ENABLEHOOK;
kommt der alte Windows95-Dialog und keine Meldung
Und wenn ich schreibefileDialog.m_ofn.Flags = OFN_ENABLEHOOK | OFN_EXPLORER;
kommt der normale Dialog
oderfileDialog.m_ofn.Flags = OFN_ENABLEHOOK & OFN_EXPLORER;
kommt die besagte Meldung und nach "Ignorieren" der XP-Dialog
Die Hilfe bringt mich auch nicht mehr weiter ...
Hast du ne Ahnung ?!
-
Auaua, du darfst Flags doch nicht verunden.
Flags werden IMMER verodert!0001 & 0010 = 0000
Ergebnis: KEIN Flag gesetzt.
0001 | 0010 = 0011
Ergebnis: Beide Flags gesetzt.
Die richtige Version war also:
fileDialog.m_ofn.Flags = OFN_ENABLEHOOK | OFN_EXPLORER;
Zumindest theoretisch - praktisch ja scheinbar nicht.
Aber von XP hab ich noch keine Ahnung.
-
Hi,
ich denke, Du benötigst auch noch eine Hook-Procedure (lpfnHook setzen).
Zitat aus MSDN:
lpfnHook
Pointer to a hook procedure. This member is ignored unless the Flags member includes the OFN_ENABLEHOOK flag.
If the OFN_EXPLORER flag is not set in the Flags member, lpfnHook is a pointer to an OFNHookProcOldStyle hook procedure that receives messages intended for the dialog box. The hook procedure returns FALSE to pass a message to the default dialog box procedure or TRUE to discard the message.If OFN_EXPLORER is set, lpfnHook is a pointer to an OFNHookProc hook procedure. The hook procedure receives notification messages sent from the dialog box. The hook procedure also receives messages for any additional controls that you defined by specifying a child dialog template. The hook procedure does not receive messages intended for the standard controls of the default dialog box.
Aber frag mich nicht, wie das genau funktioniert....
Gruss
yeti
-
Habe die Lösung des Problems gefunden unter http://www.codeproject.com/dialog/win2000fd.asp?df=100&forumid=499&exp=0&select=356143
Trotzdem danke für die Hilfe