Dialogelemente aus'm anderen Dialog heraus deaktivieren



  • Hallo,
    ich habe eine dialogfeldbasiende Application und von dem Hauptdialog kann ein ander Dialog geöffnet werden der einige Elemente des Hauptdialogs deaktivieren soll.
    Dazu habe ich in der Hauptdialogklasse eine Funktion eingefügt die nur die Elemente deaktiviert (und sie tut, aber nur im Hauptdialog), wenn ich von dem 2ten Dialog die Funktion aufrufe, stürtzt das Programm ab.

    Ich rufe es wie folgt auf:

    void ZweiterDialog::SetParent(CDialog *pWnd)
    {
    	m_pWnd = pWnd;
    }
    funktion
    {
    ((CHauptDialogKDlg*)m_pWnd)->HideElements();
    }
    

    Was mache ich falsch?



  • ach so, noch was vergessen, in der Funktion in der Hauptdialogklasse siehts so aus:

    GetDlgItem(IDC_FILTER1)->EnableWindow(FALSE);
    


  • Ich nehme mal an das dein m_pWndnicht gesetzt ist, aber das ist eigentlich egal. Denn es ist besser du benutzt das handle deines hauptdialoges udn sendest mit SendMessage oder PostMessage ein user-Defined Nachricht an deinen Hauptdialog. Da ich annehmen das dein 2. Dialog mit Create erzeugt wurde und beide zur gleichen Zeit laufen, laufen beide in einen eigenen Thread und somit hast du das Problem der Threadsyncronisation, aber das is nur mal so ne annahme, ich mach solche sachen immer über das Mesasagesystem und hatte noch nie Probleme



  • Danke, aber mir ist nicht ganz klar wie die SendMessage Zeile aussehen muss,
    könntest du mir noch kurz helfen?



  • ach ja, und das zweite Dialogfenster hab ich nicht mit create sondern mit DoModal() erzeugt.


  • Mod

    Ich halte so etwas für einen ganz miesen Stil.
    Warum sollte der zweite Dialog etwas vom ersten Dialog wissen?

    Wenn der zweite Dialog modal ist, dann kann man sowieso nichts im ersten Dialog machen und man kann entsprechende Daten zurückgeben, auf die hin der erste Dialog die Controls disabled.

    Und wenn es schon sein muss:
    Ist der zweite Dialog nicht modal, dann könntest Du beim erzeigen des zweiten Dialoges einen Zeiger auf den ersten Dialog im Konstruktor mitgeben.
    Wenn nicht sogar der erste Dialog sowieso das Parent ist. In diesem Fall könntest Du einfach casten...

    Erkläre den Sinn, und wir können Dir evtl. andere Lösungen bieten.



  • Der Sinn ist folgender, im Hauptdialog sind einige Elemente die der Standarduser nicht bedienen darf, er darf nur 2 Funktionen aus einer Combobox benutzen, der Poweruser darf auch die dritte Funktion aus der Conbobox benutzen und wenn es sie auswählt kommt das zweite Dialogfenster hoch wo er sein Passwort eingeben muss, nach dem OK-Klick in dem zweiten Dialogfenster (natürlich mit dem korrekten PWD) sollen die Zusatzelemente im Hauptfenster aktiviert werden.



  • na wo is denn das Problem, du offnest deinen 2. Dialog (Passworteingabe) mit DoModal im Hauptdialog. Wenn der User das Passwort richtig eingegeben hat, Beendest du den Dialog mit OnOK() und sonnst mit OnCancel(). Im Hauptdialog fragst du den Rückgabewert von DoModal ab und is der IDOK dann gibst du die Funktion frei an sonsten machste einfach nix. Die ganze Sache is dann noch ausbaubar, in der hinsicht ob der Passwortdialog sich mit OK nur schließen lässt wenn das Passwort auch stimmt oder net. Also ich sehe keinen Bedarf vom 2. Dialog, irgendwelche Steuerelemente im Hauptdialog zu Enablen.


Anmelden zum Antworten