VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 148|回复: 1

[求助] pMsg的wParam参数自动改变都问题

[复制链接]
13_avatar_middle
online_vip 明天你好123 发表于 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都应该是一个固定值码?
                                                                   以上,请指教,谢谢












上一篇:刚开始学习非阻塞网络编程,有几个问题请教下。
下一篇:虚基类未知错误,请求帮助。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 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

本版积分规则

关闭

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

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

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

GMT+8, 2018-11-16 12:21

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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