VC++60 第六章 键盘事件

第六章 键盘事件

当TAB键移动焦点到某按钮上时按下回车键,会产生和鼠标点击按钮同样的效果,这不是鼠标事件,而是按钮控件本身的标准行为。在编辑框中输入字符也一样,系统会发出“编辑框已被改变”这样的消息,这是编辑框控件本身的标准行为。本章要介绍的键盘事件是指:在任何状况下,用户按了一下键盘,系统捕捉到到这一事件,向主窗口发出“键盘被按下了”的消息,即发出WM_KEYDOWN这一消息映射。如果用户需要对“按了某键”有所动作,就可以在相应的响应函数中处理。

本章要点

1 如何添加键盘事件的消息映射
2 获取某键的键值信息

 

6.1 MyKey.exe程序的界面和功能

本程序的界面很简单,只有一个静态文本提示程序的用法。当用户按下某键后弹出一个消息框,显示所按键的键值(ASCII码),重复次数和一个标志值(长整数)。图chap06-01是按了小写的a后的消息框。

VC++60 <wbr>第六章 <wbr>键盘事件

 

静态文本的文字是暗灰色,因为没有被“激活”,即不选中Disabled属性。这一点很重要,因为如果它是激活状态的话,键盘消息就不是发送给对话框,而是被发送到它——被聚焦的控件上,它是唯一的控件,就是唯一的消息受体了。
创建工程和程序界面的设计就无须赘言了,设计好后就可以编写代码了。

 

6.2 添加消息映射和响应函数

在类向导窗口的Message Map页中选定该对话框的类CMyKeyDlg;在Message列表框中查到消息映射WM_KEYDOWN;按“添加函数”按钮,弹出系统推荐的函数名OnKeyDown(),就用此默认的;点[确定]后生成了该函数框架。立即点[加入代码]按钮开始写代码。

OnKeyDown()函数的声明如下:

void CMyKeyDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)

它传过来三个无符号整数类型的参数。其中nChar是该键的键值。nRepCnt是按键的重复次数,一般都是1,因为在按第一次时就被捕捉到并发出了消息。nFlags是一个标志,它用来表示某些特殊键的状态。我们的目标是显示这些信息,所以用三个字符型变量来储存这三条信息,组织好后用消息框把信息显示出来。具体代码如下:

void CMyKeyDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // TODO: Add your message handler code here and/or call default
    char strnChar[10];
    char strnFlags[10];
    char strnRepCnt[10];
    CString strKeyPressed;

    itoa(nChar, strnChar,10);
    itoa(nFlags,strnFlags,10);
    itoa(nRepCnt,strnRepCnt,10);

    strKeyPressed = (CString)"The value of this key:\n\n" +
        "nChar= " + strnChar + "\n\nnRepCnt= " + strnRepCnt +
        "\n\nnFlags= " +strnFlags;

    MessageBox(strKeyPressed, "键值测试程序");
    CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}

字符串对象strKeyPressed是要在消息框中显示的信息。参数是数值型的,为了显示先要把它们转化为字符型的,函数itoa(nChar, strnChar,10)就是把十进制整数nChar转换为字符串strnChar。strKeyPressed的赋值语句把三条信息组织在一起,其中两个"\n"一是为了换行,二是为了显示一个空行。

现在就可以编译和运行一下了。因为不能安装[退出]按钮,我们来增加一个用鼠标双击可退出的方法。在类向导窗口中选定该对话框类CMyKeyDlg,找到消息映射WM_LBUTTONDCLICK;添加函数OnLButtonDblClk();在其中加入代码OnOK()就行了。

 

思考研究题
键盘事件的另一个消息映射是WM_KEYUP,在松开按键时发生。试编写一程序,在松开按键时弹出显示键值的相关信息。

—END—

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值