CListControl插入列调试断言失败

时间:2015-07-06 20:49:52

标签: mfc assert listcontrol

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

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()中的以下代码添加列标题:

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;
}

我以这种方式将列标题添加到我的应用程序中的其他CListControls,没有任何问题。使用代码

调用模态对话框
void ListOption::OnBnClickedEventLog()
{
    EventL eventLog;
    eventLog.DoModal();
}

2 个答案:

答案 0 :(得分:2)

也许您忘记调用默认函数:

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也没有准备就绪。

答案 1 :(得分:0)

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

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

电影 - 是Listcontrol的名称

CListCtrl movies;