Problem mit Accelerator Table



  • Guten Morgen zusammen,

    ich habe in meiner Dialoganwendung gerade ein Accelerator Table hinzugefügt.

    IDR_ACCELERATOR1 ACCELERATORS 
    BEGIN
        VK_RETURN,      IDC_ManF1,              VIRTKEY, NOINVERT
        VK_RETURN,      IDC_ManF2,              VIRTKEY, NOINVERT
    END
    

    IDC_ManF1 und IDC_ManF2 sind Edit Steuerelemente.

    Bei ManF1 sage ich ihm, dass er den Focus auf ManF2 setzen soll, wenn Return gedrückt wird

    this->GetDlgItem(IDC_ManF1)->SetFocus();
    

    so, das funktioniert auch. und wenn ich jetzt bei ManF2 return drücke, soll er ein paar berechnung machen.

    Das macht er aber nicht, weil er gar nicht erst in den zugewiesenen ereignishandler reingeht.

    Ich hab mal versucht, dass nicht mit VK_RETURN sondern z.B. mit VK_NUMPAD2 zu realisieren und das funktioniert dann auf einmal. Wenn ich aber beiden VK_RETURN zuweise dann nicht.

    ON_COMMAND(IDC_ManF1, OnManf1)
    ON_COMMAND(IDC_ManF2, OnManf2)
    

    die ereignishandler habe ich alle von der IDE selber erstellen lassen mit rechte maustaste --> hinzufügen usw

    weiß jemand warum das so ist?

    hier meine preTranslate für den Accelerator

    BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
    {
    	// TODO: Fügen Sie hier Ihren spezialisierten Code ein, und/oder rufen Sie die Basisklasse auf.
    
    	if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST) {
    	return ::TranslateAccelerator(m_hWnd, (HACCEL__ *)m_hAccel, pMsg);
    	}
    
    	return CDialog::PreTranslateMessage(pMsg);
    }
    


  • mal geraten ...

    dem ding is es egal wer den focus hat .. wenn du beiden return zuweist nimmt er die erste funktion und führt diese aus. danach gibs return und das wars. zum zweiten kommt er garnicht weil er beim ersten schon greift.

    du kannst abfragen welches Steuerelement den focus hat und wenn dann auch noch return gedrückt wurde um dann entsprechend die aktion auszuführen.


Anmelden zum Antworten