【问题标题】:CVSListBox notification after delete删除后的 CVSListBox 通知
【发布时间】:2010-09-27 17:18:21
【问题描述】:

我刚刚向项目中添加了一个新的(MFC 功能包)CVSListBox 控件。控件中的项目列表由我的应用程序中的其他一些对象跟踪,因此当有任何更改时,我需要从列表框中获取大量通知,以便我可以更新其他内容。对于那些不知道该控件的人,有一个提供基本添加/删除/重新排序功能的按钮栏。

CVSListBox 控件为诸如添加或重命名项目以及更改它们的顺序之类的事情提供了可覆盖的虚拟函数 - 所有这些都很好。

但是,对于删除项目,唯一的覆盖是 OnBeforeRemoveItem,它在删除项目之前调用,并且必须返回 TRUE/FALSE 以允许删除。删除完成后,没有具体的通知。

在删除后获得通知的最佳方式是什么?

显然,这里有可能破解一些可怕的东西,因为在删除之后会有一个选择更改事件,并且可以从删除前保留一个标志来表示下一个选择更改是特殊的.但我觉得我错过了一些更清晰、更明显的东西。有什么建议吗?

【问题讨论】:

    标签: c++ mfc mfc-feature-pack


    【解决方案1】:

    假设每次都会真正删除该项目,您可以:

    • 在 OnBeforeRemoveItem 覆盖中进行处理,就像该项目已被删除一样
    • 引发您自己的 OnAfterItemRemoved 事件
    • 看看您是否可以获得底层列表控件的句柄(无论它可能是什么)并挂钩其中一个事件

    【讨论】:

      【解决方案2】:

      试试这样的:

      class my_lbox : public CVSListBox
      {
          protected:
      
              BOOL OnBeforeRemoveItem(int what_item)
              {
                  CString txt = GetItemText(what_item);
                  DWORD_PTR idata = GetItemData(what_item);
      
                  if(true) //up to you to check if this item can be removed
                  {
                      OnAfterRemoveItem(txt,idata);
                      return TRUE;
                  }
                  return FALSE;
              }
      
              void OnAfterRemoveItem(const CString& txt, DWORD_PTR idata)
              {
                  CString info;
                  info.Format(L"Removing item:'%s'",txt);
      
                  MessageBox(info);
              }
      };
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2021-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        相关资源
        最近更新 更多