C++的MFC中如何实现SHIFT和CTRL的键盘消息响应

就是运行编好的程序时按下SHIFT键屏幕显示一个MESSAGEBOX提示“你按下了SHIFT键”按下CTRL提示“你按下了CTRL键”,非系统键的消息响应... 就是运行编好的程序时按下SHIFT键屏幕显示一个MESSAGEBOX提示“你按下了SHIFT键” 按下CTRL提示“你按下了CTRL键”,非系统键的消息响应 展开
 我来答
tattackor
2015-06-09 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:859万
展开全部
  1. WM_KEYDOWN
    当一个非系统键被按下时该消息发送给具有键盘焦点的窗口。非系统键即不与ALT联用的情况。
    其中wParam 指定非系统键的虚拟键码, lParam 指定重复次数,扫描码,扩展键标识符,上下文代码,前一键状态标识符,以及转换状态标识符。
    它们如下所示:
    0-15
    指定当前消息重复的次数。该值代表按键敲击的次数,就如同用户一直按下键盘按键一样。如果按键足够长,会发送多个消息。然而,重复次数不进行累加。
    16-23
    指定扫描码。该值取决于OEM。
    24
    指定键是否为扩展键,就如同101或102键盘内的右手的ATL和CTRL键。如果是一个扩展键,则该值是1,否则,它是0.
    25-28
    保留,未使用。
    29
    指定上下文代码,对于WM_KEYDOWN消息,该值总是0.
    30
    指定之前的键状态。如果在消息发送之前,键被按下,则该值是1,否则该值是0.
    31
    指定转换状态。对于WM_KEYDOWN消息,该值总是0.
    返回值
    应用程序如果处理了该消息,则返回值是0.

  2. 响应 WM_KEYDOWN 消息,判断VK_SHIFT 和 VK_CONTROL。在MFC中是重载OnKeyDown函数,见下面代码
    void CTestView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
     if (nChar == VK_SHIFT)
       AfxMessageBox(_T("Shift"));
     else if (nChar == VK_CONTROL)
       AfxMessageBox(_T("Ctrl"));

     CView::OnKeyDown(nChar, nRepCnt, nFlags);
    }

犹悟由欣美
2019-04-21 · TA获得超过3710个赞
知道大有可为答主
回答量:3146
采纳率:30%
帮助的人:189万
展开全部
if(Shift.Contains(ssCtrl))
不过,必须是在OnKeyDown事件处理函数中才会处理这些键,OnKeyPress则只是响应字符按键的事件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6eab688
2012-08-25 · TA获得超过4690个赞
知道大有可为答主
回答量:962
采纳率:50%
帮助的人:932万
展开全部
响应 WM_KEYDOWN 消息,判断VK_SHIFT 和 VK_CONTROL。在MFC中是重载OnKeyDown函数,见下面代码
void CTestView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if (nChar == VK_SHIFT)
AfxMessageBox(_T("Shift"));
else if (nChar == VK_CONTROL)
AfxMessageBox(_T("Ctrl"));

CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式