基本信息
加速鍵,即熱鍵,快捷鍵。是產生WM_COMMAND訊息(有些情況下是WM_SYSCOMMAND)的鍵組合。許多時候,程式使用加速鍵來重複常用功能表項的動作(然而,加速鍵還可以用於執行非功能表功能)。例如,許多Windows程式都有一個包含「Delete」或「Clear」選項的「Edit」功能表,這些程式習慣上都將Del鍵指定為該選項的加速鍵。使用者可以通過「 Alt 鍵」從功能表中選擇「 Delete 」選項,或者只需按下加速鍵 Del 。當視窗訊息處理程式收到一個WM_COMMAND訊息時,它不必確定使用的是功能表還是加速鍵。
加速鍵資源
在資源描述檔案中定義加速鍵資源
在資源描述檔案中加速鍵資源的定義形式與選單定義相似,加速鍵定義的格式為:
加速鍵名 ACCELERATORS,加速鍵標識(ID),[類型][NOINVERT][ALT][SHIFT][CONTROL]
其中:
加速鍵標識:與所表示的選單項標識相同的標識值;
類型:標識該鍵為標準鍵還是虛擬鍵;
NOINVERT:表示當使用加速鍵時,選單項不高亮度顯示;
ALT,SHIFT,CONTROL:表示組合鍵的組合方式。
常用的加速鍵有以下兩種形式:
(1)″^char″,id
與Ctrl鍵組合的加速鍵。例如“檔案”選單中“保存”項的加速鍵可定義為:
″^S″,IDM_SAVE
(2)nCode,id VIRTKEY
使用虛擬鍵作為加速鍵。虛擬鍵是系統提供與設備無關的鍵碼,如鍵盤上的F功能鍵、方向鍵、Delete鍵等。如VK_F1~VK_F12分別代表F1~F12的功能鍵,VK_DELETE代表刪除鍵等。
載入加速鍵資源
在應用程式定義加速鍵資源句柄後,即可通過調用函式LoadAccelerators載入加速鍵資源,其形式為:
…
HACCEL hAccel;
…
hAccel=LoadAccelerators
(
hInstance, //hInstance為當前程式實例句柄
lpAcceIName //lpAccelName為加速鍵表名
);
翻譯加速鍵
應用程式使用加速鍵的目的是快捷地切換到需要的選單項,因此,應用程式必須完成加速鍵訊息到選單訊息的翻譯。該翻譯操作經常在應用程式的訊息循環中進行,其形式如下:
while(GetMessage(&Msg,NULL,0,0))
{
if(!TranslateAccelerator(hwnd,hAccel,&Mag))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
函式TranslateAccelerator是翻譯操作的核心,該函式的原型為:
int TranslateAccelerator
(
HWND hWnd, //為視窗句柄
HACCEL hAccel, //為加速鍵表句柄
LPMSG lpMsg //為指向MSG結構的指針
)
函式 TranslateAccelerator的作用是對照加速鍵表,將相關的按鍵訊息 WM_KEYDOWN和WM_KEYUP翻譯成WM_COMMAND或WM_SYSCOMMAND訊息。其特點是將翻譯後的WM_COMMAND或WM_SYSCOMMAND訊息直接發往視窗,而不在訊息佇列中等待。訊息翻譯完成後,函式返回非0值。