多语言展示
当前在线:1893今日阅读:176今日分享:34

对话框程序如何设置快捷键

一个应用程序的用户界面设计,少不了快捷键的设计;纵观市场各大软件,无一不为用户设计了快捷键。可见,为对话框应用程序设计快捷键具有必要性!那么,如何设计对话框快捷键呢?本篇介绍一种Windows_Hook的做法。在读者学习设计对话框应用程序快捷键的同时,还能顺便了解Windows_Hook的应用方法。
工具/原料
1

C语言基础

2

编程集成环境(本篇采用Visual Studio 2013)

方法/步骤
1

创建一个对话框程序。如图是一个对话框程序,它能响应F1、F2、Ctrl+S等快捷键。

2

现在,我们一起来实现这一功能吧!首先定义一个全局变量HHOOK hKeybroadHook = NULL;

4

在对话框初始化(相应WM_INITDIALOG)时调用SetWindowsHookEx,安装WH_GETMESSAGE钩子。关于更多SetWindowsHookEx的用法,请查看http://baike.baidu.com/link?url=4QjrqHUS1GnMNTuR978J2QUeyCofHlV0nUPhZ3prLjdfPZRyfQnj1Vf2Z9WWWsl3Bynyn1JMPq53Il2Djd5QNpBu1CvJ_eHbm1QtOAzbayi

5

我们已经能够为对话框设计快捷键了!!总结如下:1.定义全局HHOOK hHook=NULL;//反正就是一个HHOOK类型的变量2.定义回调函数,原型如下:LRESULT CALLBACK HookProc(int code,   WPARAM wParam, LPARAM lParam);3.调用SetWindowsHookEx

使用Hook捕获键盘消息示例
1

设计的HookProc回调函数如下:

2

程序太简单,不想做备份,这里贴完整代码(几百行而已)// Win32Project1.cpp : 定义应用程序的入口点。//#include 'stdafx.h'#include 'Win32Project1.h'// 全局变量: HHOOK hHook = NULL;HWND hListBox = NULL;HINSTANCE hInst;        // 当前实例INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);LRESULT CALLBACK HookProc(int code, WPARAM wParam, LPARAM lParam){ LPMSG lpMsg = (LPMSG)lParam; static TCHAR sz[10]; if (lpMsg->message == WM_KEYDOWN) {  wsprintf(sz, _T('按下%c 编码%d'),lpMsg->wParam,lpMsg->wParam);  ListBox_AddString(hListBox, sz); } return CallNextHookEx(hHook, code, wParam, lParam);}int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,                     _In_opt_ HINSTANCE hPrevInstance,                     _In_ LPTSTR    lpCmdLine,                     _In_ int       nCmdShow){ UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine);  // TODO:  在此放置代码。 hInst = hInstance; DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), NULL, About); return GetLastError();}INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){ UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG:  hListBox = GetDlgItem(hDlg, IDC_LIST1);  hHook = SetWindowsHookEx(WH_GETMESSAGE, HookProc, hInst, GetCurrentThreadId());  return (INT_PTR)TRUE; case WM_COMMAND:  if (LOWORD(wParam) == IDCANCEL)  {   EndDialog(hDlg, LOWORD(wParam));   return (INT_PTR)TRUE;  }  break; } return (INT_PTR)FALSE;}

3

程序运行效果:

推荐信息