MFC:为什么当删除ListBox的最后一项(变空)时,不调用虚函数DeleteItem()?

问题描述 投票:0回答:1

使用 MFC,我对

CListBox
(CBCGPListBox - 用于主题)进行子类化,以便在删除项目时发送选择更改通知。 这适用于所有项目,除了从列表框中删除的最后一个项目(列表框变为空)。在这种情况下,
DeleteItem()
虚函数将被NOT调用。 我觉得很奇怪,它不会被调用? 是否有其他消息或虚拟函数可以处理这个问题?

class CMyListBox : public CBCGPListBox
{

  virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
  {
    __super::DeleteItem(lpDeleteItemStruct);
    GetParent()->PostMessage(WM_COMMAND, MAKEWPARAM(GetDlgCtrlID(), LBN_SELCHANGE), (LPARAM)m_hWnd);
  };

};
mfc comctl32
1个回答
0
投票

文档指出

DeleteItem()
被称为 owner-drawn 列表框。

通过将列表框更改为所有者绘制(CBCGPListBox 处理得很好),为删除的所有项目(包括最后一个)调用

DeleteItem()

© www.soinside.com 2019 - 2024. All rights reserved.