Dialog in Dialog und Enter Taste

JoachimJogi

Mitglied
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!
 
Du kannst die RETURN- und ESC-Taste (bei letzterer geht der Dialog nämlich auch zu) in "PreTranslateMessage" abfangen:
C++:
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
 
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.
 
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.
 

Neue Beiträge

Zurück