CKeyboardManager 类
管理主框架窗口和子框架窗口的快捷键表。
语法
class CKeyboardManager : public CObject
成员
公共构造函数
名称 | 描述 |
---|---|
CKeyboardManager::CKeyboardManager | 构造 CKeyboardManager 对象。 |
公共方法
名称 | 描述 |
---|---|
CKeyboardManager::CleanUp | 清除快捷键表。 |
CKeyboardManager::FindDefaultAccelerator | 检索指定命令和窗口的默认快捷键。 |
CKeyboardManager::IsKeyHandled | 确定键是否由快捷键对应表处理。 |
CKeyboardManager::IsKeyPrintable | 指示字符是否可打印。 |
CKeyboardManager::IsShowAllAccelerators | 指示菜单是显示命令的所有快捷键还是仅显示默认快捷键。 |
CKeyboardManager::LoadState | 从 Windows 注册表加载快捷键表。 |
CKeyboardManager::ResetAll | 从应用程序资源重新加载快捷键表。 |
CKeyboardManager::SaveState | 将快捷键表保存到 Windows 注册表。 |
CKeyboardManager::ShowAllAccelerators | 指定框架是显示所有命令的所有快捷键还是每个命令的单个快捷键。 此方法不会影响只有一个关联快捷键的命令。 |
CKeyboardManager::TranslateCharToUpper | 将字符转换为其上部寄存器。 |
CKeyboardManager::UpdateAccelTable | 使用新快捷键表更新快捷键表。 |
备注
此类的成员使你可以将快捷键表保存和加载到 Windows 注册表、使用模板更新短切键表以及查找框架窗口中某个命令的默认快捷键。 此外,CKeyboardManager
对象使你可以控制如何向用户显示快捷键。
不应手动创建 CKeyboardManager
对象。 它将由应用程序的框架自动创建。 但是,应该在应用程序初始化过程中调用 CWinAppEx::InitKeyboardManager。 若要为应用程序获取指向键盘管理器的指针,请调用 CWinAppEx::GetKeyboardManager。
示例
以下示例演示如何从 CWinAppEx
类检索指向 CKeyboardManager
对象的指针,以及如何显示与菜单命令关联的所有快捷键。 此代码片段属于自定义页面示例。
// The GetKeyboardManager method is inherited from the CWinAppEx class.
CKeyboardManager *cKeyboardManager = GetKeyboardManager();
cKeyboardManager->ShowAllAccelerators();
继承层次结构
要求
标头:afxkeyboardmanager.h
CKeyboardManager::CKeyboardManager
构造 CKeyboardManager
对象。
CKeyboardManager();
备注
大多数情况下都不必直接创建 CKeyboardManager
。 默认情况下,框架会为你创建。 若要获取指向 CKeyboardManager
的指针,请调用 CWinAppEx::GetKeyboardManager。 如果确实要手动创建一个,则必须使用 CWinAppEx::InitKeyboardManager 方法对它进行初始化。
CKeyboardManager::CleanUp
释放 CKeyboardManager
资源并清除所有快捷键映射。
static void CleanUp();
注解
有关快捷键的详细信息,请参阅键盘和鼠标自定义。
不必在应用程序退出时调用此函数,因为框架会在应用程序退出期间自动调用它。
CKeyboardManager::FindDefaultAccelerator
检索指定命令和窗口的默认快捷键。
static BOOL FindDefaultAccelerator(
UINT uiCmd,
CString& str,
CFrameWnd* pWndFrame,
BOOL bIsDefaultFrame);
参数
uiCmd
[in] 命令 ID。
str
[out] 对 CString
对象的引用。
pWndFrame
[in] 指向框架窗口的指针。
bIsDefaultFrame
[in] 指定框架窗口是否为默认框架窗口。
返回值
如果找到快捷方式,则为非零值;否则为 0。
备注
此方法查找 uiCmd 指定的命令并检索默认快捷键。 然后此方法采用与此快捷键关联的字符串,并将值写入 str 参数。
CKeyboardManager::IsKeyHandled
确定指定键是否由 CKeyboardManager 类处理。
static BOOL __stdcall IsKeyHandled(
WORD nKey,
BYTE fVirt,
CFrameWnd* pWndFrame,
BOOL bIsDefaultFrame);
参数
nKey
[in] 要检查的键。
fVirt
[in] 指定快捷键的行为。 有关可能值的列表,请参阅 ACCEL 结构。
pWndFrame
[in] 框架窗口。 此方法确定快捷键是否在此框架中处理。
bIsDefaultFrame
[in] 一个布尔参数,指示 pWndFrame 是否为默认框架窗口。
返回值
如果处理快捷键,则为 TRUE。 如果不处理键或如果 pWndFrame 为 NULL,则为 FALSE。
备注
输入参数必须与 nKey 和 fVirt 在快捷键对应表中的相应条目匹配,才能确定快捷键是否在 pWndFrame 中处理。
CKeyboardManager::IsKeyPrintable
指示字符是否可打印。
static BOOL __stdcall IsKeyPrintable(const UINT nChar);
参数
nChar
[in] 此方法检查的字符。
返回值
如果字符可打印,则为非零值;如果不可打印,则为零。
备注
如果对 GetKeyboardState 的调用失败,则此方法会失败。
CKeyboardManager::IsShowAllAccelerators
指示菜单是显示与菜单命令关联的所有快捷键还是仅显示默认快捷键。
static BOOL IsShowAllAccelerators();
返回值
如果应用程序列出菜单命令的所有快捷键,则为非零值;如果应用程序仅显示默认快捷键,则为 0。
注解
应用程序会在菜单栏中列出菜单命令的快捷键。 使用函数 CKeyboardManager::ShowAllAccelerators 可控制应用程序是列出所有快捷键还是仅列出默认快捷键。
CKeyboardManager::LoadState
从 Windows 注册表加载快捷键表。
BOOL LoadState(
LPCTSTR lpszProfileName = NULL,
CFrameWnd* pDefaultFrame = NULL);
参数
lpszProfileName
[in] 保存 CKeyboardManager
数据的注册表路径。
pDefaultFrame
[in] 指向要用作默认窗口的框架窗口的指针。
返回值
如果成功加载状态,则为非零值;否则为 0。
注解
如果 lpszProfileName 参数为 NULL,则此方法会检查 CKeyboardManager
数据的默认注册表位置。 默认注册表位置由 CWinAppEx 类指定。 数据以前必须使用 CKeyboardManager::SaveState 方法写入。
如果未指定默认窗口,则会使用应用程序的主框架窗口。
CKeyboardManager::ResetAll
从应用程序资源重新加载快捷键表。
void ResetAll();
注解
此函数会清除 CKeyboardManager
实例中存储的快捷方式。 它随后会从应用程序资源重新加载键盘管理器的状态。
CKeyboardManager::SaveState
将快捷键表保存到 Windows 注册表。
BOOL SaveState(
LPCTSTR lpszProfileName = NULL,
CFrameWnd* pDefaultFrame = NULL);
参数
lpszProfileName
[in] 用于保存 CKeyboardManager
状态的注册表路径。
pDefaultFrame
[in] 指向成为默认窗口的框架窗口的指针。
返回值
如果键盘管理器状态已成功保存,则为非零值;否则为 0。
备注
如果 lpszProfileName 参数为 NULL,则此方法会将 CKeyboardManager
状态写入 CWinAppEx 类指定的默认位置。 如果你指定了位置,则可以稍后使用 CKeyboardManager::LoadState 方法加载数据。
如果未指定默认窗口,则主框架窗口会用作默认窗口。
CKeyboardManager::ShowAllAccelerators
显示与菜单命令关联的所有快捷键。
static void ShowAllAccelerators(
BOOL bShowAll = TRUE,
LPCTSTR lpszDelimiter = _afxDefaultAcceleratorDelimiter);
参数
bShowAll
[in] 如果为 TRUE,则会显示所有快捷键。 如果为 FALSE,则仅显示第一个快捷键。
lpszDelimiter
[in] 要在快捷键之间插入的字符串。 仅显示一个快捷键时,此分隔符无效。
备注
默认情况下,如果命令有多个与之关联的快捷键,则只会显示第一个快捷键。 通过此函数可列出与所有命令关联的所有快捷键。
快捷键会在菜单栏中的命令旁列出。 如果显示所有快捷键,则 lpszDelimiter 提供的字符串会分隔各个快捷键。
CKeyboardManager::TranslateCharToUpper
将字符转换为其上部寄存器。
static UINT TranslateCharToUpper(const UINT nChar);
参数
nChar
[in] 要转换的字符。
返回值
输入参数的上部寄存器中的字符。
CKeyboardManager::UpdateAccelTable
使用新快捷键表更新快捷键表。
BOOL UpdateAccelTable(
CMultiDocTemplate* pTemplate,
LPACCEL lpAccel,
int nSize,
CFrameWnd* pDefaultFrame = NULL);
BOOL UpdateAccelTable(
CMultiDocTemplate* pTemplate,
HACCEL hAccelNew,
CFrameWnd* pDefaultFrame = NULL);
参数
pTemplate
[in] 指向文档模板的指针。
lpAccel
[in] 指向新快捷键的指针。
nSize
[in] 新快捷表的大小。
pDefaultFrame
[in] 指向默认框架窗口的指针。
hAccelNew
[in] 新快捷表的句柄。
返回值
如果此方法成功,返回值为非零;否则返回值是 0。
备注
使用此函数可将现有快捷表替换多个框架窗口对象的新快捷键。 此函数接收文档模板作为参数,以获取对连接到给定文档模板的所有框架窗口对象的访问权限。