c++ - 如何使子控件处理父 CView 的加速器命令

标签 c++ visual-c++ mfc

我有一个 CFormView 和一个子 CListCtrl 控件。我能应付 加速器事件,如 Ctrl+C、Ctrl+V ... 在 CFormView 中没有 问题,通过定义以下消息处理程序:

    ON_COMMAND(ID_EDIT_COPY, &CMyFormView::OnEditCopy) 

现在我希望我的 CListCtrl 以不同的方式处理这些命令。我想要 在 CListCtrl 类中实现 OnEditCopy,而不是实现逻辑 在 View 类中。如何将加速器事件从 CView 传递到 子控件,当 CListCtrl 处于焦点时?我试过:

    ON_CONTROL_REFLECT(ID_EDIT_COPY, &CMyListCtrl::OnEditCopy) 

但它不起作用。

最佳答案

或者,您可以覆盖 CMyListCtrl 上的 PreTranslateMessage() 并调用 TranslateAccelerator()

BOOL CMyListCtrl::PreTranslateMessage(MSG* pMsg)
{
       if (m_hAccelTable)
       {
          if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg))
             return(TRUE);
       }
       return CListCtrl::PreTranslateMessage(pMsg);
}

它需要访问大型机上的全局加速器资源,或者您再次加载加速器。然后您的 CMyListCtrl 将收到快捷键表中指定的 WM_COMMAND 消息。

http://support.microsoft.com/kb/222829

关于c++ - 如何使子控件处理父 CView 的加速器命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4570069/

相关文章:

visual-c++ - C++/CLI -- 0xc000007b (INVALID_IMAGE_FORMAT) 带有/clr 选项

c++ - WMI 返回不同格式的信息

c++ - Visual Studio 2015 中 OpenGL 4 实现中的纹理单元数 (GL_TEXTUREi)

c++ - OpenSSL库是否自动使用openssl.cnf

c - 如何使用 C/C++ 预处理器生成一系列随机数

c++ - 从 CString 设置 LPSTR

c++ - 消息映射宏

c++ - Bison 解析器无法识别 "New"关键字

C++ - 可变参数函数的多个参数包

c++ - 错误 C3867 : Functional call missing argument