`
JavaFans
  • 浏览: 88760 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

LoadAccelerators & TranslateAccelerator

阅读更多
对于快捷键,例如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


0
1
分享到:
评论

相关推荐

    最全的WinAPI手册

    TranslateAccelerator 113 第十节 键盘输入函数(Keyboard Input) 114 ActivateKeyboadLayout 114 EnableWindow 115 GetActiveWindows 116 GetAsyncKeyState 116 GetFocus 117 GetKBCodePage 118 GetKeyboardLayout...

    MFC之快捷键

    如果`TranslateAccelerator`函数返回`TRUE`,表示快捷键已被处理,此时返回`TRUE`,避免消息进一步传递到默认的消息处理流程。 ```cpp BOOL CYourDialog::PreTranslateMessage(MSG* pMsg) { if (m_hAccel && ::...

    c语言贪吃蛇源码(带注释)

    hAccel = LoadAccelerators(hInstance, szAppname);//加载加速键 while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(hwnd, hAccel, &msg)) { TranslateMessage(&msg); ...

    VC++6.0技术内幕12章源码

    在VC++6.0中,开发者需要创建加速键表并将其关联到窗口,源码可能会展示如何使用`ACCEL`结构体定义加速键,并通过`LoadAccelerators`和`TranslateAccelerator`函数处理加速键事件。 3. 复文本编辑控件(Rich Text ...

    资源与对话框1

    消息循环中,TranslateAccelerator函数用于处理键盘加速器消息,当消息匹配时,发送WM_COMMAND或WM_SYSCOMMAND消息。 对话框和控件: 模态对话框是一种阻塞父窗口的对话框,它有自己的消息循环,通常使用DialogBox...

    windows API

    HACCEL hAccelTable = LoadAccelerators(hInst, MAKEINTRESOURCE(IDC_MYAPP)); ``` ##### 11. `GetMessage` 函数 读取消息队列中的下一个消息。 ```cpp while (GetMessage(&msg, NULL, 0, 0)) { if (!...

    Windows API 一日一练.pdf

    此外,教程还介绍了消息处理相关的函数,如LoadAccelerators、GetMessage、TranslateAccelerator、TranslateMessage和DispatchMessage函数。这些函数是消息循环的核心部分,负责从消息队列中取得消息,翻译消息,...

    windows+API+一日一练

    int TranslateAccelerator(HWND hWnd, HACCEL hAccelTable, LPMSG lpMsg); BOOL TranslateMessage(const MSG* lpMsg); LRESULT DispatchMessage(const MSG* lpMsg); void PostQuitMessage(int nExitCode); ``` ####...

    windows API 一日一练

    GetMessage、TranslateAccelerator、TranslateMessage和DispatchMessage函数** 这一系列函数共同构成了Windows消息循环的核心,负责接收、翻译和分发系统消息至相应的窗口过程。理解它们的工作原理,对于编写响应...

    Test-Menu.zip_API Menu_Menu_test_visual c

    7. `LoadAccelerators()` 和 `TranslateAccelerator()`:处理加速键,使用户可以通过键盘快捷键触发菜单项。 接着,描述中的“APT运行的消息机制”指的是Windows的消息循环和消息队列。在Windows程序中,用户的所有...

    windows API 一日一练(93练)

    `TranslateAccelerator` 用于将键盘输入翻译成相应的加速键消息。这一节讲述了如何使用该函数来处理加速键事件。 ### Windows API 一日一练(13) TranslateMessage 函数 `TranslateMessage` 函数负责将虚拟键码转换...

    Windows编程入门知道书

    例如,你可以使用`CreateMenu`创建菜单,`AppendMenu`添加菜单项,`LoadAccelerators`加载快捷键,`TranslateAccelerator`处理快捷键消息,`CreateWindow`创建窗口,`RegisterClass`注册窗口类,`UpdateWindow`更新...

    Windows API 一日一练

    - **说明**: `TranslateAccelerator` 用于检查当前消息是否与已定义的快捷键相匹配。如果匹配,则处理该快捷键,否则继续消息循环。 #### 13. TranslateMessage 函数 - **知识点**: 转换输入消息的方法。 - **说明...

    VC++记事本源代码

    4. **LoadAccelerators** 和 **TranslateAccelerator**:这两个API用于处理快捷键。记事本程序可能会支持如Ctrl+C、Ctrl+V这样的常用快捷键操作。 5. **OpenFile** 和 **WriteFile**:用于打开和写入文件。记事本...

    采用TCP协议visual c++ WIN 32 API SDK网络编程聊天程序实例

    在主消息循环中,`GetMessage`函数用于获取消息队列中的消息,`TranslateAccelerator`检查消息是否由快捷键触发,`TranslateMessage`处理输入消息,最后`DispatchMessage`将消息分派给相应的窗口过程,即`WndProc`...

    windows API一日一练

    - **加速键翻译**:学习如何使用`TranslateAccelerator`函数将键盘输入转换为相应的加速键消息。 - **消息优先级**:理解在消息循环中如何优先处理加速键消息。 - **实践操作**: - 在消息循环中调用`...

Global site tag (gtag.js) - Google Analytics