1

私のアプリケーションでは、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():

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

ListView コントロールの準備ができていないため、ASSERT(::IsWindow(m_hWnd))失敗します。ダイアログのいずれかの準備ができていません。m_hWndm_hWnd

于 2015-07-06T21:23:11.477 に答える