Frage zu Acceleratortable...



  • Hallo zusammen,

    ich wollte mal fragen wie ich eine Acceleratortable mit einer Dialog-Anwendung verbinde. Mit Icon läuft dat ja so:(alles im Konstruktor der Dialogklasse)

    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//m_hIcon ist HICON
    

    Wie mache ich das mit einer Acceleratortable??(so geht es nicht)

    LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACC));
    

    Es liegt vielleicht daran das ich ein Handle von Acceleratortable in meiner Dialog-Klasse haben muss, ähnlich wie mit dem Icon(HICON).

    Wie heisst der Typ für das Handle des Acceleratortable?
    Oder ist mein Ansatz komplett falsch? 😕



  • So müsste es gehen:

    class CMyDialog : public CDialog
    {
        ...
        HACCEL m_hAccel;
    }
    
    CMyDialog::CMyDialog() ...
    {
        ...
        m_hAccel = NULL
    }
    
    CMyDialog::OnInitDialog()
    {
        ...
        m_Accel = LoadAccelerators(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MYACCELERATORS));
    }
    
    BOOL CMyDialog::PreTranslateMessage(MSG* msg)
    {
        if (m_hAccel != NULL && msg->message >= WM_KEYFIRST && msg->message <= WM_KEYLAST)
        {
            if (::TranslateAccelerator(m_hWnd, m_Accel, msg))
                return TRUE;
    
        return CDialog::PreTranslateMessage(msg);
    }
    


  • Danke, nur noch eins:

    Und wo frage ich dann die Tastaturkürzel ab??
    Welches Ereignis soll ich nehmen? 😕



  • Genau wie beim CView:

    class CMyDialog : public CDialog
    {
        ...
        HACCEL m_hAccel;
        afx_msg void OnMyCommand();
    }
    
    BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
        ON_COMMAND(ID_MYCOMMAND, OnMyCommand)
        ...
    END_MESSAGE_MAP()
    
    void CMyDialog::OnMyCommand()
    {
    
    }
    

    Und in der Accelerator-Tabelle IDR_MYACCELERATORS verknüpfst du dann ID_MYCOMMAND mit der gewünschten Tastenkombination.


Anmelden zum Antworten