Fokus setzen



  • Wie kann ich einen Fokus auf ein Steuerelement setzen, z.B. einen Button?
    Weil wenn ich Enter drücke in meinem Dialog wird der Dialgo geschlossen, was ich nicht möchte...



  • Servus,

    du kannst z.B. die OnOK Methode abfangen und /oder einen Accelator setzen.

    Bsp. Accelator:
    Name Mod
    ID_RETURN - NONE - VK_RETURN - Virtkey

    Einbinden in dein HP:

    BEGIN_MESSAGE_MAP(CDeinDlg, CDialog)
       ON_COMMAND(ID_RETURN, OnReutrnWurdeGedrückt)
    END_MESSAGE_MAP()
    

    Dann macht er das was in OnReutrnWurdeGedrückt drinsteht...

    Sollte funzen 😃

    *winke*
    Hellsgore

    Habe was vergessen wenn du einen einfachen Dialog benutzt brauchst du noch das:

    .cpp

    BOOL CDeinDlg::PreTranslateMessage(MSG* pMsg)
    {
    	if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST) 
    	{ 
    		if (pMsg->wParam != VK_TAB)
    			return ::TranslateAccelerator(m_hWnd, (HACCEL__ *)m_hAccel, pMsg); 
    	}
    	return CDialog::PreTranslateMessage(pMsg);
    }
    

    und unter OnInitDialog():

    m_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR));
    

    m_hAccel ist eine Member von deinem Dialog natürlich in der .h Deklariert.



  • Hallo,

    vielen Dank für die Antwort.

    Wo müsste ich das denn nun einfügen? Kann cih das auch öfter einfügen, so das immer wenn ein Button gedrückt wird sich der Fokus ändert und auf ein anderes Element zeigt?



  • Das hat jetzt nichts mit dem Fokus zu tun....

    Mit dem Tastendruck von Return führst du einfach dann eine Funktion aus die du haben möchtest. In dieser Funktion kann jetzt z.B. drinstehen:

    void CDeinDlg::OnReturnGedrückt()
    {
        m_ctrDeinFocusEdit.SetFocus();
    }
    

    sollte dann damit funzen.... 🙂

    *winke*
    Hellsgore

    EDIT:

    Hier auch noch was aus der FAQ:
    http://www.c-plusplus.net/forum/viewtopic.php?t=39132



  • Wie sähe es denn damit aus

    m_ctrlMyButton.SetFocus();
    

    Soll dies in OnInitDialog passieren, muss OnInit FALSE zurückgeben!


Anmelden zum Antworten