Visual C++——加速键
基本概念
加速鍵:用戶在鍵盤上按下了定義的加速鍵也將產(chǎn)生相應(yīng)的命令消息。
什么是鍵盤加速鍵?加速鍵是產(chǎn)生WM_COMMAND消息(有些情況下是WM_SYSCOMMAND)的鍵組合。許多時候,程序使用加速鍵來重復(fù)常用菜單項的動作(然而,加速鍵還可以用于運行非菜單功能)。例如,許多Windows程序都有一個包含“Delete”或“Clear”選項的“Edit”菜單,這些程序習 慣上都將Del鍵指定為該選項的加速鍵。使用者可以通過“ Alt 鍵”從菜單中選擇“ Delete ”選項,或者只需按下加速鍵 Del 。當窗口消息處理程序收到一個WM_COMMAND消息時,它不必確定使用的是菜單還是加速鍵。為什么要使用加速鍵? 您也許會問:為什么我應(yīng)該使用加速鍵?為什么不能直接攔截WM_KEYDOWN或WM_CHAR消息而自己實現(xiàn)同樣的菜單功能呢?好處又在哪里呢?對于一 個單窗口應(yīng)用程序,您當然可以攔截鍵盤消息,但是使用加速鍵可以得到一些好處:您不需要把菜單和加速鍵的處理方式重寫一遍。對于有多個窗口和多個窗口消息處理程序的應(yīng)用程序來說,加速鍵是非常重要的。正如我們所看到的,Windows將鍵盤消息發(fā)送給目前活動窗口的窗口 消息處理程序。然而對于加速鍵, Windows把WM_COMMAND消息發(fā)送給窗口消息處理程序,該窗口消息處理程序的代號在Windows函數(shù) TranslateAccelerator中給出。通常這是主窗口,也是擁有菜單的窗口,這意味著無須每個窗口消息處理程序都把加速鍵的操作處理程序重寫 一遍。如果您在主窗口的顯示區(qū)域中,使用了非系統(tǒng)模態(tài)對話框(在下一章中會討論)或者子窗口,那么這種好處就變得非常重要。如果定義一個特定的加速鍵以便 在不同的窗口之間移動,那么,只需要一個窗口消息處理程序有這個處理程序。
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、加載加速鍵資源
調(diào)用函數(shù)LoadAccelerators加載加速鍵資源:
… HACCEL hAccel; … hAccel=LoadAccelerators (hInstance,? // 當前程序?qū)嵗浔鷏pAcceIName? // lpAccelName為加速鍵表名 );3、翻譯加速鍵
翻譯操作經(jīng)常在應(yīng)用程序的消息循環(huán)中進行:
while(GetMessage(&Msg,NULL,0,0)){ if(!TranslateAccelerator(hwnd,hAccel,&Mag)){? TranslateMessage(&Msg);DispatchMessage(&Msg);} }函數(shù)TranslateAccelerator是翻譯操作的核心。其特點是將翻譯后的消息直接發(fā)往窗口,不在消息隊列中等待。
參考文章
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
總結(jié)
以上是生活随笔為你收集整理的Visual C++——加速键的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual C++——加载自定义光标
- 下一篇: s3c2440移植MQTT