Visual c++ 在CEdit::OnChar中检测CTRL并测试nChar值?
我从Visual c++ 在CEdit::OnChar中检测CTRL并测试nChar值?,visual-c++,mfc,cedit,Visual C++,Mfc,Cedit,我从CEdit派生了自己的控件,它的行为符合我的意愿: #define IsSHIFTpressed() ( (GetKeyState(VK_SHIFT) & (1 << (sizeof(SHORT)*8-1))) != 0 ) void CEditEx::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { if (IsCTRLpressed() && nChar == 2) {
CEdit
派生了自己的控件,它的行为符合我的意愿:
#define IsSHIFTpressed() ( (GetKeyState(VK_SHIFT) & (1 << (sizeof(SHORT)*8-1))) != 0 )
void CEditEx::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if (IsCTRLpressed() && nChar == 2)
{
// Do something
return;
}
if (IsCTRLpressed() && nChar == 9)
{
// Do something
return;
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
#define isshift pressed()((GetKeyState(VK_SHIFT)和(1)正如您所注意到的,对于Ctrl+“a字母”(独立于大小写)的键盘输入,OnChar
的参数的值将是ASCII“控制键”值,1(表示“a”)到26(表示“z”)
回答你的第二点:搜索
头文件不会显示这些标记的VK_xxx
标记;但是,请注意,某些控制代码(按惯例)用于其他操作:Ctrl+M(十进制13)相当于Return或Enter,并且标头具有#define VK_Return 0x0D
;此外,对于您的一种特定情况,Ctrl+I(9)是ASCII选项卡
字符,因此标头具有#define VK_选项卡0x09
定义
尽管Ctrl+B ASCII码(0x02)现在很少使用(STX
,或“文本开始”),但Windows在鼠标右键(#define VK_RBUTTON 0x02
)上使用了该值
因此,要回答您的第一点:是的,您需要进行GetKeyState(VK_控件)
检查!否则,右键单击可能会显示错误的Ctrl+B,而Tab键将显示错误的Ctrl+I
此外,尽管除了您自己的调查之外,我没有任何“确凿证据”,但我认为在按住控制键的同时单击鼠标右键将为nChar
(即不是2)生成不同的值,并且Ctrl+Tab将生成与单独使用Tab不同的nChar