CListControl 插入列调试断言失败

CListControl Insert Column Debug Assertion Failure

在我的应用程序中,我创建了一个包含 mfc 列表控件的模式对话框。当我没有初始化列表控件中的任何列或项目时,对话框显示没有错误。当我尝试向列表控件添加一列时,我收到以下 Debug Assertion Failed 消息:

如果有帮助,断点在

_AFXCMN_INLINE int CListCtrl::InsertColumn(int nCol, const LVCOLUMN* pColumn) { ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, LVM_INSERTCOLUMN, nCol, (LPARAM)pColumn); }

我正在尝试使用以下代码在 OnInitDialog() 中添加列 headers:

BOOL EventL::OnInitDialog()
{
    m_ListEventLog.InsertColumn(0, _T("Description"), LVCFMT_LEFT, 250);  //Failure happens HERE
    //m_ListEventLog.InsertColumn(0, "Description", LVCFMT_LEFT, 200, 0); //I have also tried things such as this.
    return FALSE;
}

我以这种方式将列 headers 添加到我的应用程序中的其他 CListControls,没有问题。使用以下代码调用模态对话框:

void ListOption::OnBnClickedEventLog()
{
    EventL eventLog;
    eventLog.DoModal();
}

可能是你忘了调用默认函数:

BOOL EventL::OnInitDialog()
{
    BOOL res = CDialog::OnInitDialog();
    m_ListEventLog.InsertColumn(0, _T("Description"), LVCFMT_LEFT, 250);  //Failure happens HERE
    //m_ListEventLog.InsertColumn(0, "Description", LVCFMT_LEFT, 200, 0); //I have also tried things such as this.
    return res; // or return FALSE;
}

这就是 ASSERT(::IsWindow(m_hWnd)) 失败的原因,因为 ListView 控件的 m_hWnd 还没有准备好。 m_hWnd 的对话框也未就绪。

我遇到了同样的问题,直到我将 DDX_Control(pDX, IDC_LIST1, movies); 添加到

    void MainDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_LIST1, movies);
}

电影 - 是列表控件的名称

CListCtrl movies;