CFileDialog - Vererbung



  • hi, ich versuche das Standarddialogfeld(Cfiledialog) zu benutzen 1 Frage. Wie kann ich in dem Fenster ne Bildanzeige(wie bei psp) einbinden??? und 2 Frage wie kann man festlegen dass nur die Filter in der Auswahlliste gehen???? Also nicht dass man sich überhaupt andere Dateitypen anzeigen lassen kann!!!!

    Mfg



  • Hi!
    Zur Ansicht: Erstell einen Dialog, leite eine CDialog Klasse ab, ändere die abgeleitete Klasse nach CFileDialog und ersetzte ALLE CDialog nach CFileDialog. Aber nur in der .h !!!!! Erstell einen Staticrahmen und gib ihm die ID str32=0x045f - Titel bleibt leer.
    Ändere den konstruktor
    CMyFileDIALOG(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDREADONLY|OFN_OVERWRITEPROMT,LPCTSTR lpszFilter=NULL,CWnd
    pParentWnd = NULL);

    Weiters:
    CMyDialog::CMyDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags,LPCTSTR lpszFilter,CWnd* pParentWnd = NULL)
    :CfileDialog(bOpenFileDialog, lpszDefExt,lpszFileName,dwFlags,lpszFilter,pParentWnd)
    {
    m_ofn.Flags = OFN_ENABLETEMPLATE;
    ofn.lpTemplateName = MAKEINTERNRESSOURCE(IDD_MYFILEDIALOG);
    ofn.lpstrTitle = "Mein Filedialog";
    m_bDeleteAll = FALSE;
    }

    Zugriff: GetParent()->GetDlgItem(...)->
    Dateiname: GetParentItem(0x480)->GetWindowText(m_strFileName);
    GetParent()->SensMessage(WM_COMMAND,IDCANCEL);

    Aufruf: CMyFileDialog dlg(TRUE,NULL,"*dat");

    mfg *mike* 😃



  • Sorry, da nuß ich dich glaube ich enttäuschen. Bei der von dir geforderten Funktionalität geht das so einfach IMHO nicht. Du könntest aber den Dialog erstellen und mit SetWindowLong(....). Die Messageverarbeitung umhängen. Dann könntest du eventuell die Tastatureingaben abfangen (Die braucht der Nutzer ja, um irgendwas ändern zu können).
    Andere Möglichkeit wäre, sich mit Spy++ mal anzuschauen, wie man an das HANDLE für das Editfeld für die Eingabe des Dateinamens kommt eventuell kann man dann Nutzereingaben auf dieses Feld explizit verbieten. Aber das geht alles eher in den Bereich WINAPI als MFC.



  • 1. 0x480 ist das Eingabefeld - kannst selbst in Spy++ nachschauen
    2. str32=0x045f ist die ID für untergeordnete Fenster
    3. Die Frage war "Wie kann ich in dem Fenster ne Bildanzeige(wie bei psp) einbinden???" und nicht "Wie kann ich Klickereignisse abfangen"
    4. Bei mir funktionierst einwandfrei



  • @mike:

    Sorry, mein Post ging auch nicht an Dich, du warst einfach nur zu schnell. Aber wie kann denn das Handle eines Filedialogs konstant 0x480 sein? Das ist doch jedes mal beim Erstellen des Dialogs anders? Wenn das bei Dir funktioniert, würde ich gerne mal ein Beispielprojekt sehen. Das wäre sehr interressant, da man dann ja wunderbar auch andere Std. MFC Dialoge auf diese Art und Weise "aufbohren" könnte.



  • Ich denke mal er meint dir ID nicht das Handle!



  • Ahja, war mir halt neu, das ich mit Spy++ auch die ID des Controls rauskriege. Danke, das erspart das mühselige von Fenster zu Fenster hangeln mittels GetWindow und GetNextWindow.

    Bei http://www.codeproject.com gibt es dazu auch ein schönes Beispiel.

    Man lernt eben nie aus 🙂


Anmelden zum Antworten