tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
466
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    JoachimJogi JoachimJogi ist offline Mitglied
    Registriert seit
    Feb 2007
    Beiträge
    22
    Hallo,

    zur besseren hierarchischen Übersicht habe ich ein Dialog auf einem DIalog eingefügt.
    Der "innere" Dialog ist eine eigene Klasse.
    Im äußeren Dialog binde ich ihn mit
    m_inner.Create(IDD...,this)
    m_inner.MoveWindow(xy)
    m_inner.ShowWindow(SW_SHOW)
    ein

    Das ganze funktioniert wunder bar, solange ich nicht die Enter Taste drück, wenn ich in einem Eingabefeld im inneren Dialog bin. Dann verschwindet er nämlich komplett und ich seh die freie Fläche vom äußeren Dialog.

    Meine Vermutung ist, dass der innere Dialog geschlossen wird, da man standardmäßig ja jeden Dialog durch Enter beendet.

    Meine Frage:
    Wie unterdrücke ich das? Welche Nachricht fängt die Enter Taste ab? Gibt es eine saubere Lösung um einen Dialog in einem Dialog anzuzeigen?

    Danke!
     

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Du kannst die RETURN- und ESC-Taste (bei letzterer geht der Dialog nämlich auch zu) in "PreTranslateMessage" abfangen:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    BOOL CInnererDialog::PreTranslateMessage(MSG* pMsg) 
    {
        if( pMsg->message == WM_KEYDOWN )
        {   
            if( pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN )
            {
                return TRUE;
            }    
        }
        
        return CDialog::PreTranslateMessage(pMsg);
    }
    Ansonsten ist deine Lösung schon der dafür übliche Weg. Was "Saubereres" gibt es meines Wissens nicht.

    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    JoachimJogi JoachimJogi ist offline Mitglied
    Registriert seit
    Feb 2007
    Beiträge
    22
    Vielen Dank!

    ich geh einfach mal davon aus, dass wenn ich zb ein ListElement auf dem inneren Dialog habe und eine Funktion ausführen möchte, wenn Enter gedrückt wird, dass das dann auch in der PreTranslate verarbeitet wird.
     

  4. #4
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Die CDialog-Klasse bietet OnOK und OnCancel als virtuelle Funktionen an. Die werden "dummerweise" bereits mit der Funktionalität des Dialog-Beendens versehen. Um das bei einer von CDialog abgeleiteten Klasse zu verhindern, einfach die beiden Funktionen überladen und den Aufruf von CDialog::OnOk bzw. CDialog::OnCancel entfernen.
     

Ähnliche Themen

  1. Dialog aus Dialog heraus öffnen
    Von sTEk im Forum .NET Windows Forms
    Antworten: 3
    Letzter Beitrag: 08.12.08, 22:07
  2. [C++] Zugriff auf Dialog aus anderem Dialog
    Von JoachimJogi im Forum VisualStudio & MFC
    Antworten: 7
    Letzter Beitrag: 20.02.07, 17:06
  3. Strings von Dialog A nach Dialog B übertragen
    Von king_of_drums im Forum C/C++
    Antworten: 13
    Letzter Beitrag: 30.08.06, 13:45
  4. Strings von Dialog A nach Dialog B übertragen
    Von king_of_drums im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 15.08.06, 13:47
  5. Antworten: 5
    Letzter Beitrag: 24.05.05, 12:49