对于快捷键,例如CTRL+O,直接打开某个特定的Form。
1. 定义resource文件,里面绑定好 菜单名称-->UID, 例如:ABCForm --> 0x0301
同时定义好快捷键绑定关系,例如:
"O", 0x0301, VIRTKEY, CONTROL, NOINVERT
"D", 0xC603, VIRTKEY, CONTROL, NOINVERT
"D", 0x500A, VIRTKEY, CONTROL, SHIFT, NOINVERT
2. 资源文件编译,
3. 执行的时候,先调用LoadAccelerators方法,将资源load起来
4. 在用户CTRL+O操作的时候,系统通过TranslateAccelerator 函数将这个组合转化成为新的message。 TranslateAccelerator 函数利用前面资源里面定义的关系,将WM_KEYDOWN/WM_SYSKEYDOWN message 转化成为WM_COMMAND/WM_SYSCOMMAND message。同时,将转化之后的WM_COMMAND/WM_SYSCOMMAND message直接交给windows处理程序.
sample code
bool MY_EventQueue::GetNextEvent (MY_Event& e)
{
...
MY_Event* tEvent = NULL;
MSG msg = {0};
BOOL returnCode = GetMessage (&msg, NULL, (UINT) NULL, (UINT) NULL);
if (returnCode)
{
if (msg.message == WM_TIMER || msg.message == WM_MOUSEMOVE)
{
e.m_event = coreNullEvent;
}
int result = TranslateAccelerator ((HWND)cm->GetWindow (cmw_Frame),
(HACCEL)cm->GetAccelerators (), &msg);
if (!result)
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
tEvent = GetEvent ();
...
return tEvent;
}
return false;
}
进阶阅读,MSDN:About Keyboard Accelerators
http://msdn.microsoft.com/en-us/library/ms646335(VS.85).aspx
分享到:
相关推荐
TranslateAccelerator 113 第十节 键盘输入函数(Keyboard Input) 114 ActivateKeyboadLayout 114 EnableWindow 115 GetActiveWindows 116 GetAsyncKeyState 116 GetFocus 117 GetKBCodePage 118 GetKeyboardLayout...
如果`TranslateAccelerator`函数返回`TRUE`,表示快捷键已被处理,此时返回`TRUE`,避免消息进一步传递到默认的消息处理流程。 ```cpp BOOL CYourDialog::PreTranslateMessage(MSG* pMsg) { if (m_hAccel && ::...
hAccel = LoadAccelerators(hInstance, szAppname);//加载加速键 while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(hwnd, hAccel, &msg)) { TranslateMessage(&msg); ...
在VC++6.0中,开发者需要创建加速键表并将其关联到窗口,源码可能会展示如何使用`ACCEL`结构体定义加速键,并通过`LoadAccelerators`和`TranslateAccelerator`函数处理加速键事件。 3. 复文本编辑控件(Rich Text ...
消息循环中,TranslateAccelerator函数用于处理键盘加速器消息,当消息匹配时,发送WM_COMMAND或WM_SYSCOMMAND消息。 对话框和控件: 模态对话框是一种阻塞父窗口的对话框,它有自己的消息循环,通常使用DialogBox...
HACCEL hAccelTable = LoadAccelerators(hInst, MAKEINTRESOURCE(IDC_MYAPP)); ``` ##### 11. `GetMessage` 函数 读取消息队列中的下一个消息。 ```cpp while (GetMessage(&msg, NULL, 0, 0)) { if (!...
此外,教程还介绍了消息处理相关的函数,如LoadAccelerators、GetMessage、TranslateAccelerator、TranslateMessage和DispatchMessage函数。这些函数是消息循环的核心部分,负责从消息队列中取得消息,翻译消息,...
int TranslateAccelerator(HWND hWnd, HACCEL hAccelTable, LPMSG lpMsg); BOOL TranslateMessage(const MSG* lpMsg); LRESULT DispatchMessage(const MSG* lpMsg); void PostQuitMessage(int nExitCode); ``` ####...
GetMessage、TranslateAccelerator、TranslateMessage和DispatchMessage函数** 这一系列函数共同构成了Windows消息循环的核心,负责接收、翻译和分发系统消息至相应的窗口过程。理解它们的工作原理,对于编写响应...
7. `LoadAccelerators()` 和 `TranslateAccelerator()`:处理加速键,使用户可以通过键盘快捷键触发菜单项。 接着,描述中的“APT运行的消息机制”指的是Windows的消息循环和消息队列。在Windows程序中,用户的所有...
`TranslateAccelerator` 用于将键盘输入翻译成相应的加速键消息。这一节讲述了如何使用该函数来处理加速键事件。 ### Windows API 一日一练(13) TranslateMessage 函数 `TranslateMessage` 函数负责将虚拟键码转换...
例如,你可以使用`CreateMenu`创建菜单,`AppendMenu`添加菜单项,`LoadAccelerators`加载快捷键,`TranslateAccelerator`处理快捷键消息,`CreateWindow`创建窗口,`RegisterClass`注册窗口类,`UpdateWindow`更新...
- **说明**: `TranslateAccelerator` 用于检查当前消息是否与已定义的快捷键相匹配。如果匹配,则处理该快捷键,否则继续消息循环。 #### 13. TranslateMessage 函数 - **知识点**: 转换输入消息的方法。 - **说明...
4. **LoadAccelerators** 和 **TranslateAccelerator**:这两个API用于处理快捷键。记事本程序可能会支持如Ctrl+C、Ctrl+V这样的常用快捷键操作。 5. **OpenFile** 和 **WriteFile**:用于打开和写入文件。记事本...
在主消息循环中,`GetMessage`函数用于获取消息队列中的消息,`TranslateAccelerator`检查消息是否由快捷键触发,`TranslateMessage`处理输入消息,最后`DispatchMessage`将消息分派给相应的窗口过程,即`WndProc`...
- **加速键翻译**:学习如何使用`TranslateAccelerator`函数将键盘输入转换为相应的加速键消息。 - **消息优先级**:理解在消息循环中如何优先处理加速键消息。 - **实践操作**: - 在消息循环中调用`...