I have some accelerators configured and if using just the Ctrl key it works fine, but if I make it Shift+Ctrl it doesn't work (doesn't even show as a shortcut in the MFC menus where as the Ctrl version does). The entries I've tried with both upper and lower case letters, doesn't make a difference. This is what the entries in the accelerators look like:
"R", ID_R1, VIRTKEY, CONTROL, NOINVERT
"R", ID_R2, VIRTKEY, SHIFT, CONTROL, NOINVERT
What am I doing wrong?
Edit: I made the "R" capital above because of the two answer talking about that, but I originally had "R" and only changed to "r" before giving up and asking here. But the "R" doesn't work for Ctrl-Shift-R either, where as the Ctrl-R works fine?
Edit: Using Spy x64 and checking the main window, never get a command sent. If I go to the list view on the right side of a splitter window and press Ctrl-Shift-R in that order, the only thing generated is:
<000041> 00000000002100D6 P WM_KEYDOWN nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000042> 00000000002100D6 S LVM_GETNEXTITEM iStart:-1 flags:LVNI_SELECTED
<000043> 00000000002100D6 R LVM_GETNEXTITEM iIndex:-1
<000044> 00000000002100D6 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<000045> 00000000002100D6 S LVM_GETNEXTITEM iStart:-1 flags:LVNI_SELECTED
<000046> 00000000002100D6 R LVM_GETNEXTITEM iIndex:-1
<000047> 00000000002100D6 P WM_KEYUP nVirtKey:'R' cRepeat:1 ScanCode:13 fExtended:0 fAltDown:0 fRepeat:0 fUp:1
<000048> 00000000002100D6 S LVM_GETNEXTITEM iStart:-1 flags:LVNI_SELECTED
<000049> 00000000002100D6 R LVM_GETNEXTITEM iIndex:-1
<000050> 00000000002100D6 P WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
<000051> 00000000002100D6 S LVM_GETNEXTITEM iStart:-1 flags:LVNI_SELECTED
<000052> 00000000002100D6 R LVM_GETNEXTITEM iIndex:-1
<000053> 00000000002100D6 P WM_KEYUP nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:1 fUp:1
Edit:
Even more data, I placed a conditional breakpoint in thrdcore.cpp at line 178 where the message loop is (the line is if (pState->m_msgCur.message != WM_KICKIDLE && !AfxPreTranslateMessage(&(pState->m_msgCur)))). The break point is: pState->m_msgCur.message==0x0100 && pState->m_msgCur.wParam==0x52 (WM_KEYDOWN for R). When pressing R or Ctrl-R the breakpoint hits, when pressing Ctrl-Shift-R the breakpoint doesn't occur. Above spy trace there is never a WM_KEYDOWN for the R, only an up?
Edit:
Now really getting weird. I decided to go in to the keyboard settings for VS2017 and see if something assigned to Ctrl-Shift-R, I press it and nothing happens, I try any other letter like Ctrl-Shift-T and it works fine. Could it by my keyboard? Or something deeper in Win10 x64 that is eating a WM_KEYDOWN for R when Ctrl-Shift is pressed?
Thanks.
You should use upper-case characters in the accelerator table:
To show the shortcut keys on the menu, you have to modify the menu item itself, like change
to