【问题标题】:capture delete key in CListCtrl and do soem processing捕获 CListCtrl 中的删除键并进行 soem 处理
【发布时间】:2010-05-28 14:00:57
【问题描述】:

我有一个继承自 CListCtrl 类的类,比如类列表。 我有另一个类 dlg,它继承自 CDialog。

Class dlg 包含一个类列表的实例。

我在 dlg 类中有一个删除按钮,我在该按钮上删除 listCtrl 中的选定项目并进行许多其他处理。 我希望删除键具有相同的功能。

我添加了 OnKeyDown() fn 是我的类列表,我可以在其中捕获 VK_DELETE 键。但我的问题是,我如何在对话类中进行其他处理。 所有这些处理都是基于 dlg 类而不是基于列表类。 我有很多这样的 dlg 类具有不同的数据,并且在每个 dlg 类中处理都是不同的。

我尝试在对话框类中捕获 VK_DELETE,但如果焦点在列表类上,它不会捕获它。

我完全被卡住了,不知道该怎么做。

请给我一些想法,我该怎么做。

谢谢, 新加坡

【问题讨论】:

    标签: visual-c++ mfc


    【解决方案1】:

    如果将 List 类中捕获的调用委托给父 Dialog 类呢?因此,您在 List 类上捕获 VK_DELETE 并向父级说您收到了删除命令。因此,如果您愿意,您可以将所有处理保留在父 Dialog 类上。

    ((CMyParentDialog*) GetParent())->OnDeleteKeyPressed(this);
    

    或者更好的是,创建一条自定义消息并将其发布到父窗口。

    #define W_DELETE_PRESSED_ON_LIST (WM_USER + 1)
    
    GetParent()->PostMessage(WM_DELETE_PRESSED_ON_LIST);
    

    【讨论】:

    • 但我的列表类是通用的,我在许多 dlg 类中使用它。所以,如果我需要这样做,我需要为父类获取 RTTI,然后将其转换为特定的父类,然后调用它的 fn。有没有其他方法,让我不用使用RTTI?
    • 很高兴为您提供帮助。在 SO 习惯上接受有助于解决您的问题的答案。您可以通过单击每个答案分数附近的选中图像来做到这一点。当你这样做时,它应该变成绿色。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2019-07-16
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多