She*_*een 1 c++ mfc visual-c++
我有一个CFormView和一个子CListCtrl控件。通过定义以下消息处理程序,我可以毫无问题地处理加速器事件,例如CFormView中的Ctrl + C,Ctrl + V...。
ON_COMMAND(ID_EDIT_COPY, &CMyFormView::OnEditCopy)
Run Code Online (Sandbox Code Playgroud)
现在,我希望CListCtrl以不同的方式处理这些命令。我想在CListCtrl类中实现OnEditCopy,而不是在视图类中实现逻辑。当CListCtrl成为焦点时,如何将加速器事件从CView传递给子控件?我尝试像:
ON_CONTROL_REFLECT(ID_EDIT_COPY, &CMyListCtrl::OnEditCopy)
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。
或者,您可以覆盖CMyListCtrl上的PreTranslateMessage()并调用TranslateAccelerator()
BOOL CMyListCtrl::PreTranslateMessage(MSG* pMsg)
{
if (m_hAccelTable)
{
if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg))
return(TRUE);
}
return CListCtrl::PreTranslateMessage(pMsg);
}
Run Code Online (Sandbox Code Playgroud)
它需要访问大型机上的全局加速器资源,或者您再次加载加速器。然后,您的CMyListCtrl将收到在加速器表中指定的WM_COMMAND消息。
http://support.microsoft.com/kb/222829
| 归档时间: |
|
| 查看次数: |
2533 次 |
| 最近记录: |