1

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

调试断言失败!

如果有帮助,断点在

_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();
}
4

2 回答 2

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))失败的原因,因为m_hWndListView 控件还没有准备好。m_hWnd对话也不会准备好。

于 2015-07-06T21:23:11.477 回答
0

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

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

电影 - 是 Listcontrol 的名称

CListCtrl movies;
于 2018-02-08T17:12:16.197 回答