推荐给好友   您现在的位置: 主页 > 编程文档 > VC文档 > 在应用程序中使用热键

在应用程序中使用热键

时间:2010-03-04 21:10 来源:未知 作者:admin 收藏到:[百度书签] [QQ书签]
Windows操作系统提供了许多热键,比如常用的热键:Win+E打开资源管理器,Win+F打开查找对话框,F1打开帮助等等。使用这些热键可以使我们的操作更加方便。那么,怎样在自己的应用程序中添加和使用热键呢?下面以VC++为例来说明。
MFC提供了CHotKeyCtrl类,由 CHotKeyCtrl 类表示的热键控件是一个窗口,显示用户键入的组合键(如 CTRL +S)的文本表示形式。它还维护此键的内部表示形式和一组表示转换状态的标志。热键控件实际上并不设置热键,要靠程序员自己来实现。
应用程序可以按下列两种方法来使用CHotKeyCtrl控件设置热键:
1.通过向将要激活的窗口发送 WM_SETHOTKEY 消息,设置一个用于激活非子窗口的全局热键。
全局热键与特定的非子窗口关联。它使用户得以从系统的任何部分激活窗口。应用程序通过向特定的窗口发送 WM_SETHOTKEY 消息来设置该窗口的全局热键。例如,假如 m_hotkey 是 CHotKeyCtrl 的对象,则可以使用下列代码将控件中指定的热键和主窗口关联起来。
WORD wKey = m_ hotkey.GetHotKey( );
AfxGetMainWnd()->SendMessage( WM_SETHOTKEY,
wKey);
这样,每当用户按全局热键时,指定的窗口就会接收 WM_SYSCOMMAND 消息,该消息将 SC_HOTKEY 指定为命令类型。该消息还激活接收它的窗口。由于该消息不包括按下的确切键的任何信息,使用此方法不能区分可能附加到同一窗口的不同热键。在发送 WM_SETHOTKEY 的应用程序退出之前,热键一直保持有效。
2.通过调用 API 函数 RegisterHotKey() 来设置线程特定的热键。
应用程序使用 RegisterHotKey() 函数设置线程特定的热键。用户按线程特定的热键后,Windows 将 WM_HOTKEY 消息发送到特定线程的消息队列的开始处。WM_HOTKEY消息的结构如下:
idHotKey = (int) wParam;
fuModifiers = (UINT) LOWORD(lParam);
uVirtKey = (UINT) HIWORD(lParam);
下面是两个关键的函数:
BOOL RegisterHotKey( HWND hWnd, int id, UINT fsModifiers, UINT vk );
该函数用于在系统中注册热键。参数hWnd用于指定注册热键的窗口,如果为NULL的话将使热键被注册到该函数的调用线程;id用于指定该热键的标识,在热键消息相应的时候,我们将通过该ID来对不同的热键消息作区分;fsModifiers用于指定修改键,它可以是下面值的组合:

描述
MOD_ALT
任一Alt键按下
MOD_CONTROL
任一Control键按下
MOD_SHIFT
任一Shift键按下
vk的值为指定的虚拟键码。
BOOL UnregisterHotKey( HWND hWnd, int id); //用于在系统中注消热键
该函数的参数和RegisiterHotKey的那两个参数意义大体相同。
有了这两个函数,就可以开始编程了。 下面将通过一个例子(光驱控制程序)详细讲解如何使用CHotKeyCtrl控件。
新建立一个对话框工程cd,添加几个控件(如图1所示)

文章tags:

顶一下
0
0%
踩一下
(0)
0%

Copyright © 2010 代码天下 版权所有
ad