我有一个CFormView和一个子CListCtrl控件。我能应付
加速器事件,例如CFormView中的Ctrl + C,Ctrl + V ...
问题,通过定义以下消息处理程序:
ON_COMMAND(ID_EDIT_COPY, &CMyFormView::OnEditCopy)
现在,我希望CListCtrl以不同的方式处理这些命令。我想要
在CListCtrl类中实现OnEditCopy,而不是实现逻辑
在 View 类中。如何将加速器事件从CView传递到
子控件,当CListCtrl处于焦点时?我尝试过:
ON_CONTROL_REFLECT(ID_EDIT_COPY, &CMyListCtrl::OnEditCopy)
但这是行不通的。
最佳答案
在CMyListCtrl中使用相同的ON_COMMAND宏。
ON_COMMAND(ID_EDIT_COPY, &CMyListCtrl::OnEditCopy)
您需要做的就是重写OnCmdMsg方法。
BOOL CMyFormView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
if (GetFocus() == m_myListCtrl
&& m_myListCtrl->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
return TRUE;
return CMyFormView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
(m_myListCtrl是CMyListCtrl实例指针。)
这将使所有WM_COMMAND消息首先在m_myListCtrl(如果它是焦点窗口)中处理。