背景:ctrollist设置report风格,插入列表头,再插入每一行内容。现象:编译不报错,但执行时,执行到“插入行内容”就触发中断。相关代码:
//信息列表初始化设置
m_ctrlList.SetBkColor(RGB(160,180,220));   //设置列表框背景颜色,但不覆盖有文件部分
m_ctrlList.SetTextBkColor(RGB(160,180,220));//把文本部分背景设置成列表框背景颜色 //设置背景文字颜色
m_ctrlList.SetTextColor(RGB(200,85,125));
DWORD dwStyle=::GetWindowLong(m_ctrlList.m_hWnd,GWL_STYLE); //设置为报表形式
SetWindowLong(m_ctrlList.m_hWnd,GWL_STYLE,dwStyle|LVS_REPORT);
DWORD ExStyle =m_ctrlList.GetExtendedStyle(); //设置为整栏选择和网格线
m_ctrlList.SetExtendedStyle(ExStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); //初始化列表控件标题栏
m_ctrlList.InsertColumn(0,_T("编号"),LVCFMT_LEFT,65);
m_ctrlList.InsertColumn(1,_T("代号"),LVCFMT_LEFT,80); //m_ctrlList.InsertItem( 0, _T("88") );
m_ctrlList.SetItemText  (0, 1, _T("123"));断点跟踪时,上面这句出的错,错误指向:文件 winctrl2.cpp
BOOL CListCtrl::SetItemText(int nItem, int nSubItem, LPCTSTR lpszText)
{
ASSERT(::IsWindow(m_hWnd));
ASSERT((GetStyle() & LVS_OWNERDATA)==0); LVITEM lvi; (指向这行)
lvi.iSubItem = nSubItem;
lvi.pszText = (LPTSTR) lpszText;
return (BOOL) ::SendMessage(m_hWnd, LVM_SETITEMTEXT, nItem, (LPARAM)&lvi);
}
到底是怎么回事呢,麻烦大家帮忙看看,O(∩_∩)O谢谢

解决方案 »

  1.   

    //m_ctrlList.InsertItem( 0, _T("88") );
    m_ctrlList.SetItemText (0, 1, _T("123"));的一定要,即先要插入一行。
      

  2.   

    第一列是用InsertItem函数,后面列使用SetItemText 
      

  3.   

    把这行注释,在属性哪里改report试一下
      

  4.   

    SetWindowLong(m_ctrlList.m_hWnd,GWL_STYLE,dwStyle|LVS_REPORT);
      

  5.   

    把SetWindowLong(m_ctrlList.m_hWnd,GWL_STYLE,dwStyle|LVS_REPORT);注释,在属性那里该report不可以吗?我之前好像就是这个原因
      

  6.   

    把控件的 LVS_OWNERDATA 属性去掉
      

  7.   

    ASSERT((GetStyle() & LVS_OWNERDATA)==0); 这句是说你的风格中不能有LVS_OWNERDATA