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 ENDTja, 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