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();

继承层次结构

CObject

CKeyboardManager

要求

标头: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。

备注

使用此函数可将现有快捷表替换多个框架窗口对象的新快捷键。 此函数接收文档模板作为参数,以获取对连接到给定文档模板的所有框架窗口对象的访问权限。

另请参阅

层次结构图

CWinAppEx 类
CWinAppEx::InitKeyboardManager
键盘和鼠标自定义