當使用者使用軟體時,往往有些功能是最常用的功能。作為開發人員,就需要讓使用者感覺到這個軟體好用,這樣就需要把他們最常用的功能用起來最方便,最快捷,能提高生產效率。在這方面,微軟是做到家了,比如在鍵盤上有一個Windows鍵,Windows很多功能都可以通過這個鍵與其它鍵來組合成快速鍵,提高使用的方便性。現在就來介紹一下怎麼樣讓你的程式也方便使用,就是使用快速鍵。
函數LoadAccelerators聲明如下:
WINUSERAPI
HACCEL
WINAPI
LoadAcceleratorsA(
__in_opt HINSTANCE hInstance,
__in LPCSTR lpTableName);
WINUSERAPI
HACCEL
WINAPI
LoadAcceleratorsW(
__in_opt HINSTANCE hInstance,
__in LPCWSTR lpTableName);
#ifdef UNICODE
#define LoadAccelerators LoadAcceleratorsW
#else
#define LoadAccelerators LoadAcceleratorsA
#endif // !UNICODE
hInstance是應用程式執行個體控制代碼,用來從程式的資源檔裡尋找到快速鍵定義。
lpTableName是快速鍵的定義表格。
調用這個函數的執行個體如下:
#001 //主程式入口
#002 //
#003 // 蔡軍生 2007/07/12
#004 //
#005 int APIENTRY _tWinMain(HINSTANCE hInstance,
#006 HINSTANCE hPrevInstance,
#007 LPTSTR lpCmdLine,
#008 int nCmdShow)
#009 {
#010 UNREFERENCED_PARAMETER(hPrevInstance);
#011 UNREFERENCED_PARAMETER(lpCmdLine);
#012
#013 //
#014 MSG msg;
#015 HACCEL hAccelTable;
#016
#017 // 載入全域字串。
#018 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
#019 LoadString(hInstance, IDC_TESTWIN, szWindowClass, MAX_LOADSTRING);
#020 MyRegisterClass(hInstance);
#021
#022 // 應用程式初始化:
#023 if (!InitInstance (hInstance, nCmdShow))
#024 {
#025 return FALSE;
#026 }
#027
#028 hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWIN));
#029
#030 // 訊息迴圈:
#031 while (GetMessage(&msg, NULL, 0, 0))
#032 {
#033 if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
#034 {
#035 TranslateMessage(&msg);
#036 DispatchMessage(&msg);
#037 }
#038 }
#039
#040 return (int) msg.wParam;
#041 }
第28行就是調用函數LoadAccelerators從資源裡載入快速鍵。
到這裡,就已經瞭解和使用LoadAccelerators函數了。但還有一個問題,就是快速鍵的資源是怎麼樣定義的呢?問得好,下面就帶你看一下它的定義:
#001 /////////////////////////////////////////////////////////////////////////////
#002 //
#003 // Accelerator
#004 //
#005
#006 IDC_TESTWIN ACCELERATORS
#007 BEGIN
#008 "?", IDM_ABOUT, ASCII, ALT
#009 "/", IDM_ABOUT, ASCII, ALT
#010 END
#011
這是從資源檔TestWin.rc裡拷貝出來的。IDC_TESTWIN是快速鍵表的名稱,ACCELERATORS是快速鍵定義的關鍵字,BEGIN是表示快速鍵的開始,END是表示快速鍵的結束。
下面快速鍵定義文法:
acctablename ACCELERATORS [optional-statements] {event, idvalue, [type] [options]... }
[optional-statements]是可選的選項。
event是必須有的內容,它是定義的鍵碼,或者鍵的ASCII碼。
idvalue是快速鍵響應的ID命令。
type是類型選擇。
上面第8行和第9行裡就是設定ALT+‘?’或者ALT + ‘/’作為快速鍵,當使用者按下ALT+‘?’或者ALT + ‘/’時就會彈出關於對話方塊。