VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 502|回复: 1

pMsg的wParam参数自动改变都问题

[复制链接]
13_avatar_middle
最佳答案
0 
online_vip 发表于 2018-11-1 14:31:13 | 显示全部楼层 |阅读模式
      在学习vc++基础班[10]---对话框响应鼠标及键盘消息一课时,发现如下问题,请教下原因:
1.当代码如下,使用WM_CHAR,分别输入‘x’'X'时,查看pMsg的wParam参数发现为120,88 和asic码对应。
BOOL CMFCApplication4Dlg::PreTranslateMessage(MSG* pMsg)
{
        // TODO: 在此添加专用代码和/或调用基类
        if (pMsg->message == WM_CHAR) {
                        switch (pMsg->wParam)
                        {
                        case 'X':
                                MessageBox(_T("您按下了向x键!"));
                                return TRUE;
                        case 'x':
                                MessageBox(_T("您按下了向H键!"));
                                return TRUE;
                        default:break;
                        }
        }
        return CDialogEx::PreTranslateMessage(pMsg);
}
2.当代码如下,使用WM_KEYDOWN,分别输入‘x’'X'时,只会执行case'X'项,查看pMsg的wParam参数发现为88 。
BOOL CMFCApplication4Dlg::PreTranslateMessage(MSG* pMsg)
{
        // TODO: 在此添加专用代码和/或调用基类
        if (pMsg->message == WM_CHAR) {
                        switch (pMsg->wParam)
                        {
                        case 'X':
                                MessageBox(_T("您按下了向x键!"));
                                return TRUE;
                        case 'x':
                                MessageBox(_T("您按下了向H键!"));
                                return TRUE;
                        default:break;
                        }
        }
        return CDialogEx::PreTranslateMessage(pMsg);
}

3.问题:
         问什么改变WM_KEYDOWN/WM_CHAR时,pMsg的wParam参数会随着改变,不应该在什么情况下,按下同样按键后pMsg都应该是一个固定值码?
                                                                   以上,请指教,谢谢












上一篇:想学 linux C开发
下一篇:关于变量自增输出的疑问
51_avatar_middle
最佳答案
8 
online_admins 发表于 2018-11-1 14:51:15 | 显示全部楼层
WM_KEYDOWN 消息和 WM_CHAR不同,WM_KEYDOWN 的是按键消息,所以 wParam 的值就是虚拟键盘码,不区分大小写的英文名字叫做:Virtual-Key Codes
各个值可以看下这个页面:https://docs.microsoft.com/en-us ... v/virtual-key-codes

如果要在 WM_KEYDOWN 消息中判断当前是大小写的话,可以判断下当前的 Shift 键或者 CapsLock 键是否按下了,如果按下了,那么肯定是大写,没按下肯定是小写。即使用 GetKeyState 或者 GetAsyncKeyState 函数,参数要同时考虑 VK_SHIFT 和 VK_CAPITAL 就可以判断出来了
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-11-13 11:25

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表