Get shortcut key failed with "Alt + num" in PretranslateMsg in MFC? -
i want preprocess keyboard message in pretranslatemsg in mfc. write following code.
if( pmsg->message == wm_keyup ) { if( getkeystate(vk_control) || getkeystate(vk_shift) || getkeystate(vk_menu) ) { cstring cskey = translatekeytostring( getkeystate(vk_control) & 0x8000 ,getkeystate(vk_shift) & 0x8000, getkeystate(vk_menu)&0x8000, pmsg->wparam ); doworkforacceleratorkey(cskey); return true; } }
with above code. can successfull shotcut in "cskey" "ctrl+alt+1" , "ctrl+1" can't "alt+1", when press alt+1, cskey strange single character. happens "alt+1", , how solve problem? thank you.
you don't wm_keyup message 1. alt key, entered characters used in different way.
instead of wm_keyup, receive wm_syskeyup. wm_keyup receive should have nvirtkey code of vk_menu.
this messages captured spy++ when press alt+1 in notepad.
wm_syskeydown nvirtkey:vk_menu crepeat:1 scancode:38 fextended:0 faltdown:1 frepeat:0 fup:0 wm_syskeydown nvirtkey:vk_menu crepeat:1 scancode:38 fextended:0 faltdown:1 frepeat:1 fup:0 wm_syskeydown nvirtkey:'1' crepeat:1 scancode:02 fextended:0 faltdown:1 frepeat:0 fup:0 wm_syschar chcharcode:'49' (49) crepeat:1 scancode:02 fextended:0 faltdown:1 frepeat:0 fup:0 wm_syskeyup nvirtkey:'1' crepeat:1 scancode:02 fextended:0 faltdown:1 frepeat:1 fup:1 wm_keyup nvirtkey:vk_menu crepeat:1 scancode:38 fextended:0 faltdown:0 frepeat:1 fup:1 wm_syskeydown nvirtkey:vk_menu crepeat:1 scancode:38 fextended:0 faltdown:1 frepeat:0 fup:0
Comments
Post a Comment