当用户使用软件时,往往有些功能是最常用的功能。作为开发人员,就需要让用户感觉 到这个软件好用,这样就需要把他们最常用的功能用起来最方便,最快捷,能提高生产效率。 在这方面,微软是做到家了,比如在键盘上有一个 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 是快捷键的定义表格。
调用这个函数的实例如下:
//主程序入口
//
//
//
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
//
MSG msg;
HACCEL hAccelTable;
// 加载全局字符串。
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_TESTWIN, szWindowClass, MAX_LOADSTRING);
MyReg isterClass(hInstance);
// 应用程序初始化:
if (!Init Instance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTab le = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWIN));
// 消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
- 第 28 行就是调用函数 LoadAccelerators 从资源里加载快捷键。
到这里,就已经了解和使用 LoadAccelerators 函数了。但还有一个问题,就是快捷键的资源是怎么样定义的呢?问得好,下面就带你看一下它的定义:
/
//
// Accelerator
//
IDC_TESTWIN ACCELERATORS
BEGIN
"?", IDM_ABOUT, ASCII, ALT
"/", IDM_ABOUT, ASCII, ALT
END
这是从资源文件 TestWin.rc 里拷贝出来的。
- IDC_TESTWIN 是快捷键表的名称,
- ACCELERATORS 是快捷键定义的关键字,
- BEGIN 是表示快捷键的开始,
- END 是表示快捷键的结束。
下面快捷键定义语法:
acctab lename ACCELERATORS [optional-statements] {event, idvalue, [type] [options]… }
- [optional-statements]是可选的选项。
- event 是必须有的内容,它是定义的键码,或者键的 ASCII 码。
- idvalue 是快捷键响应的 ID 命令。
- type 是类型选择。
上面第 8 行和第 9 行里就是设置 ALT+„?‟或者 ALT + „/‟作为快捷键,当用户按下 ALT+„?‟或者 ALT + „/‟时就会弹出关于对话框。