IDR_MAINFRAME - Accelerator



  • Hallo zusammen,

    unter Accelerator in der Ressourcendatei habe ich - denk ich - korrekt meine gewünschte Tastenkombination eingegeben.
    Woran kann es liegen, dass diese dennoch nicht funktioniert?

    Wäre klasse, wenn mir jemand helfen könnte.
    Besten Dank, mira



  • Um das Thema nochmal aufzugreifen...
    Hat vielleicht doch noch jemand eine Idee zu der Frage?
    Nur eine Anregung über die ich dann grübeln könnte?!



  • Erklär uns doch noch mal genau, was du gemacht hast (vielleicht auch mal etwas Text aus der *.rc) und was du genau erreichen möchtest.

    Dabei denkst du nochmal drüber nach und wir kriegen mehr Informationen. Das hilft beim helfen. 😃



  • OK. 🙂 Was hab ich gemacht: Die Menüressource angelegt und in der Accelerator-Tabelle die Tastenkombinationen angelegt. (Das erkennt man alles in dem nachfolgenden Quellcode, oder?)
    Erreichen will ich damit, dass z.B. das Dialogfeld mit der ID IDD_OPTIONEN erscheint, sobald ich Strg+O drücke. Bis jetzt öffnet sich das nur, wenn ich in der Menüressource auf Datensatz -> Optionen... klicke.

    void CFundpoolView::OnOptionen() 
    {
    	COptionenDlg myOptDlg;
    
    	myOptDlg.DoModal();
    }
    

    In dem Projekt funktioniert nur leider keiner der angegebenen Shortcuts.

    Ich hoffe, das hilft beim helfen. 🙂
    Meldet euch, wenn ich mehr Infos braucht. Dankeschön.

    /////////////////////////////////////////////////////////////////////////////
    //
    // Menu
    //
    
    IDR_MAINFRAME MENU PRELOAD DISCARDABLE 
    BEGIN
        POPUP "&Datei"
        BEGIN
            MENUITEM "&Drucken...\tStrg+P",         ID_FILE_PRINT
            MENUITEM "Sei&tenansicht",              ID_FILE_PRINT_PREVIEW
            MENUITEM "Drucker&einrichtung...",      ID_FILE_PRINT_SETUP
            MENUITEM SEPARATOR
            MENUITEM "&Beenden",                    ID_APP_EXIT
        END
        POPUP "&Bearbeiten"
        BEGIN
            MENUITEM "&Rückgängig\tStrg+Z",         ID_EDIT_UNDO
            MENUITEM SEPARATOR
            MENUITEM "&Ausschneiden\tStrg+X",       ID_EDIT_CUT
            MENUITEM "&Kopieren\tStrg+C",           ID_EDIT_COPY
            MENUITEM "E&infügen\tStrg+V",           ID_EDIT_PASTE
        END
        POPUP "&Ansicht"
        BEGIN
            MENUITEM "&Symbolleiste",               ID_VIEW_TOOLBAR
            MENUITEM "S&tatusleiste",               ID_VIEW_STATUS_BAR
        END
        POPUP "Daten&satz"
        BEGIN
            MENUITEM "&Datensatz einfügen...\tStrg+N", ID_NEW_RECORD
            MENUITEM "&Optionen...\tStrg+O",        ID_OPTIONEN
        END
        POPUP "&?"
        BEGIN
            MENUITEM "Inf&o über project...",      ID_APP_ABOUT
        END
    END
    
    /////////////////////////////////////////////////////////////////////////////
    //
    // Accelerator
    //
    
    IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE 
    BEGIN
        "C",            ID_EDIT_COPY,           VIRTKEY, CONTROL, NOINVERT
        "N",            ID_NEW_RECORD,          VIRTKEY, CONTROL, NOINVERT
        "O",            ID_OPTIONEN,            VIRTKEY, CONTROL, NOINVERT
        "P",            ID_FILE_PRINT,          VIRTKEY, CONTROL, NOINVERT
        "V",            ID_EDIT_PASTE,          VIRTKEY, CONTROL, NOINVERT
        VK_BACK,        ID_EDIT_UNDO,           VIRTKEY, ALT, NOINVERT
        VK_DELETE,      ID_EDIT_CUT,            VIRTKEY, SHIFT, NOINVERT
        VK_F6,          ID_NEXT_PANE,           VIRTKEY, NOINVERT
        VK_F6,          ID_PREV_PANE,           VIRTKEY, SHIFT, NOINVERT
        VK_INSERT,      ID_EDIT_COPY,           VIRTKEY, CONTROL, NOINVERT
        VK_INSERT,      ID_EDIT_PASTE,          VIRTKEY, SHIFT, NOINVERT
        "X",            ID_EDIT_CUT,            VIRTKEY, CONTROL, NOINVERT
        "Z",            ID_EDIT_UNDO,           VIRTKEY, CONTROL, NOINVERT
    END
    


  • Hmm, komisch ich kann da keinen Unterschied zu meinem Projekt sehen. Und bei mir hat Strg+O funktioniert. (Nachdem ich dem Teil auch eine Funktion gegeben hatte. 😃

    IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE 
    BEGIN
        "C",            ID_EDIT_COPY,           VIRTKEY, CONTROL, NOINVERT
        "N",            ID_FILE_NEW,            VIRTKEY, CONTROL, NOINVERT
        "O",            ID_FILE_OPEN,           VIRTKEY, CONTROL, NOINVERT
        "P",            ID_FILE_PRINT,          VIRTKEY, CONTROL, NOINVERT
        "S",            ID_FILE_SAVE,           VIRTKEY, CONTROL, NOINVERT
        "V",            ID_EDIT_PASTE,          VIRTKEY, CONTROL, NOINVERT
        VK_BACK,        ID_EDIT_UNDO,           VIRTKEY, ALT, NOINVERT
        VK_DELETE,      ID_EDIT_CUT,            VIRTKEY, SHIFT, NOINVERT
        VK_F1,          ID_HELP,                VIRTKEY, NOINVERT
        VK_F1,          ID_CONTEXT_HELP,        VIRTKEY, SHIFT, NOINVERT
        VK_F6,          ID_NEXT_PANE,           VIRTKEY, NOINVERT
        VK_F6,          ID_PREV_PANE,           VIRTKEY, SHIFT, NOINVERT
        VK_INSERT,      ID_EDIT_COPY,           VIRTKEY, CONTROL, NOINVERT
        VK_INSERT,      ID_EDIT_PASTE,          VIRTKEY, SHIFT, NOINVERT
        "X",            ID_EDIT_CUT,            VIRTKEY, CONTROL, NOINVERT
        "Z",            ID_EDIT_UNDO,           VIRTKEY, CONTROL, NOINVERT
    END
    

    Tja, da bin ich erstmal ratlos. Ich guck aber nochmal in mein schlaues Buch, vielleicht steht das was zu dem Problem. 😞

    -----------------------------------------------------------------------------

    Hab das hier in der MSDN gefunden:

    Where does CFrameWnd get the accelerator table? When you load your frame, CFrameWnd::LoadFrame looks for an accelerator table with the same ID as your document template (for example, IDR_MAINFRAME), and loads it into m_hAccelTable. All this magic happens totally behind the scenes, courtesy of MFC, without you having to lift your pinky—but only for main frames!

    Hängt es vielleicht damit zusammen?
    Vielleicht wird das alles ja gar nicht geladen. 😕



  • vielen dank für deine antwort.
    daran liegt es zwar nicht, da m_hAccelTable korrekt geladen wird.
    allerdings bin ich dabei auf eine andere idee gekommen.
    meine anwendung erstellt in der Klasse CMyView (abgeleitet von CRecordView) ein Registerkarten-Element mit verschiedenen Seiten. lasse ich die Registerkarten weg, so funktionieren die Shortcuts. deshalb vermute ich, dass da irgendwas mit der nachrichten-weiterleitung nicht funktioniert, weil der focus auf dem falschen dialog-feld liegt oder sowas in der art.
    muss jetzt "nur noch" herausfinden, wie ich das beheben kann.
    also, dank dir auf jeden fall!
    mira



  • hallo zusammen,

    ich bin immer noch ziemlich ratlos.
    meine keydown-nachricht scheint bei keinem einzigen dialogfeld anzukommen.
    wie gesagt - ich habe in der Ansicht ein Registerkarten-Element mit 5 Seiten. Jede Seite ist eine Instanz der Dialog-Klasse CMyDialog und enhält diverse EditFelder und ein CListCtrl-Element. Reichen diese Infos zu irgendeiner Diagnose?
    Woran könnte es denn liegen, dass meine Shortcuts nicht ausgeführt werden? Ich hab keine Ahnung, wo meine Keydown-Nachricht hingeleitet wird. Liegt der Fokus auf dem Item einer Registerkartenseite, so funktioniert's. Sonst nicht.

    Wär klasse, wenn jemand einen Tip könnte.
    MfG, mira


Anmelden zum Antworten