Visual C++——加速键

基本概念

加速键:用户在键盘上按下了定义的加速键也将产生相应的命令消息。

什么是键盘加速键?加速键是产生WM_COMMAND消息(有些情况下是WM_SYSCOMMAND)的键组合。许多时候,程序使用加速键来重复常用菜单项的动作(然而,加速键还可以用于运行非菜单功能)。例如,许多Windows程序都有一个包含“Delete”或“Clear”选项的“Edit”菜单,这些程序习 惯上都将Del键指定为该选项的加速键。使用者可以通过“ Alt 键”从菜单中选择“ Delete ”选项,或者只需按下加速键 Del 。当窗口消息处理程序收到一个WM_COMMAND消息时,它不必确定使用的是菜单还是加速键。为什么要使用加速键? 您也许会问:为什么我应该使用加速键?为什么不能直接拦截WM_KEYDOWN或WM_CHAR消息而自己实现同样的菜单功能呢?好处又在哪里呢?对于一 个单窗口应用程序,您当然可以拦截键盘消息,但是使用加速键可以得到一些好处:您不需要把菜单和加速键的处理方式重写一遍。对于有多个窗口和多个窗口消息处理程序的应用程序来说,加速键是非常重要的。正如我们所看到的,Windows将键盘消息发送给目前活动窗口的窗口 消息处理程序。然而对于加速键, Windows把WM_COMMAND消息发送给窗口消息处理程序,该窗口消息处理程序的代号在Windows函数 TranslateAccelerator中给出。通常这是主窗口,也是拥有菜单的窗口,这意味着无须每个窗口消息处理程序都把加速键的操作处理程序重写 一遍。如果您在主窗口的显示区域中,使用了非系统模态对话框(在下一章中会讨论)或者子窗口,那么这种好处就变得非常重要。如果定义一个特定的加速键以便 在不同的窗口之间移动,那么,只需要一个窗口消息处理程序有这个处理程序。

1、在资源描述文件中定义加速键资源

加速键名 ACCELERATORS 

加速键标识(ID),

[类型 ]

[NOINVERT]  //使用加速键时,菜单项不高亮显示

[ALT][SHIFT][CONTROL] //组合键的组合方式

常用的加速键有两种形式:

①“^char”,id

例如:“文件”菜单中“保存”项的加速键可定义为:

         “^S” , IDM_SAVE

②nCode, id VIRTKEY

使用虚拟键作为加速键。

例如将F1键定义为“帮助”菜单项的加速键,其ID标识为IDM_HELP,其形式如下:

          VK_F1,IDM_HELP,VIRTKEY

2、加载加速键资源

调用函数LoadAccelerators加载加速键资源:

…
HACCEL hAccel;
…
hAccel=LoadAccelerators
(hInstance,  // 当前程序实例句柄lpAcceIName  // lpAccelName为加速键表名
);

3、翻译加速键

翻译操作经常在应用程序的消息循环中进行:

while(GetMessage(&Msg,NULL,0,0)){ if(!TranslateAccelerator(hwnd,hAccel,&Mag)){  TranslateMessage(&Msg);DispatchMessage(&Msg);}
}

函数TranslateAccelerator是翻译操作的核心。其特点是将翻译后的消息直接发往窗口,不在消息队列中等待。

参考文章

https://zhidao.baidu.com/question/1753994495707065988.html 

http://www.360doc.com/content/11/0328/16/4539198_105361115.shtml

http://blog.sina.com.cn/s/blog_45eaa01a0102xcx3.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部