The difference between Hotkey, accelerator, and composite key.
2010-07-12 15:12
381 查看
For Hotkey:
ON_HOTKEY()...
RegisterHotKey()...
For accelerator:
In Frame Window, LoadAccelTable(MAKEINTRESOURCE(IDR_MAINFRAME)) (automatically)
Other window, ::LoadAccelerators(AfxGetModuleInstance(), MAKEINTRESOURCE(IDR_MAINFRAME));
TranslateAcceletrator(m_hWnd, hAccl, lpMsg);
For Composite Key:
Override PreTranslateMessage(MSG * pMsg) member function.
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_F3)
{
if (GetKeyState(VK_SHIFT) & 0x8000)
MessageBox("F3 and Shift is pressed");
else
MessageBox("Only F3 is pressed");
}
For Hot key, it is the system wide. For example, if we register a hot key, it may conflict with other applications if other apps also register it. More over, If our app process the hot key message, other app no longer to deal it at all. F3 as example, if our app implement F3 search, other app has no chance to do so.
But for accelerator and composite key, they are app independent.
CWnd::OnCmdMsg() can be used to change the regular WM_COMMAND routine, it is especially useful if you want to route WM_COMMAND to the non frame /view window, such as general CWnd window not derived from CView, Cdocument, CFrameWnd, CDocTemplate.
ON_HOTKEY()...
RegisterHotKey()...
For accelerator:
In Frame Window, LoadAccelTable(MAKEINTRESOURCE(IDR_MAINFRAME)) (automatically)
Other window, ::LoadAccelerators(AfxGetModuleInstance(), MAKEINTRESOURCE(IDR_MAINFRAME));
TranslateAcceletrator(m_hWnd, hAccl, lpMsg);
For Composite Key:
Override PreTranslateMessage(MSG * pMsg) member function.
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_F3)
{
if (GetKeyState(VK_SHIFT) & 0x8000)
MessageBox("F3 and Shift is pressed");
else
MessageBox("Only F3 is pressed");
}
For Hot key, it is the system wide. For example, if we register a hot key, it may conflict with other applications if other apps also register it. More over, If our app process the hot key message, other app no longer to deal it at all. F3 as example, if our app implement F3 search, other app has no chance to do so.
But for accelerator and composite key, they are app independent.
CWnd::OnCmdMsg() can be used to change the regular WM_COMMAND routine, it is especially useful if you want to route WM_COMMAND to the non frame /view window, such as general CWnd window not derived from CView, Cdocument, CFrameWnd, CDocTemplate.
相关文章推荐
- What is the difference between objectForKey and valueForKey?
- What is the difference between authorized_key and known_host file for SSH
- The difference between Delegate and Composite
- What's the difference between doGet()/doPost() and processRequest()?
- The difference between SendMessage and PostMessage
- Key differences between rolling shutter and frame (global) shutter
- The Biggest Differences Between Google Play and Apple App Store Keyword Entry
- What is the difference between addView and addViewInLayout?
- What's the difference between jquery.js and jquery.min.js?
- The Difference Between “Add Web Reference” and “Add Service Reference”
- SharePoint : The difference and relation between SPListItem.Update and SPListItem.SystemUpdate Methods 【转载】
- What is the difference between a thread and a process?
- What is the difference between Enumeration and Iterator ?
- What is the difference between database table and database view?
- What is the difference between Implicit SSL and Explicit SSL?
- The difference between su and su -
- php中each和print的区别(What is the difference between echo and print?)
- What the difference between __weak and __block reference?
- What is the difference between user level threads and kernel level threads?
- In PHP5, what is the difference between using self and $this? When is each appropriate?