Windows API一日一练(10)LoadAccelerators函数

Post date: 2012/3/27 上午 07:15:58

分类: Direct3D2007-07-19 08:41 4719人阅读 评论(1) 收藏 举报

当用户使用软件时,往往有些功能是最常用的功能。作为开发人员,就需要让用户感觉到这个软件好用,这样就需要把他们最常用的功能用起来最方便,最快捷,能提高生产效率。在这方面,微软是做到家了,比如在键盘上有一个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 + ‘/’时就会弹出关于对话框。