奇了怪了,report表格插入行数据问题

lingshawu 2012-07-04 10:18:16
背景: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谢谢
...全文
209 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-03-08
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
schlafenhamster 2012-07-04
  • 打赏
  • 举报
回复
//m_ctrlList.InsertItem( 0, _T("88") );
m_ctrlList.SetItemText (0, 1, _T("123"));

的一定要,即先要插入一行。
  • 打赏
  • 举报
回复
ASSERT((GetStyle() & LVS_OWNERDATA)==0); 这句是说你的风格中不能有LVS_OWNERDATA
zgl7903 2012-07-04
  • 打赏
  • 举报
回复
把控件的 LVS_OWNERDATA 属性去掉
elaine 2012-07-04
  • 打赏
  • 举报
回复
把SetWindowLong(m_ctrlList.m_hWnd,GWL_STYLE,dwStyle|LVS_REPORT);注释,在属性那里该report不可以吗?我之前好像就是这个原因
elaine 2012-07-04
  • 打赏
  • 举报
回复
SetWindowLong(m_ctrlList.m_hWnd,GWL_STYLE,dwStyle|LVS_REPORT);
elaine 2012-07-04
  • 打赏
  • 举报
回复
把这行注释,在属性哪里改report试一下
lingshawu 2012-07-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
//m_ctrlList.InsertItem( 0, _T("88") );
m_ctrlList.SetItemText (0, 1, _T("123"));

红的一定要,即先要插入一行。
[/Quote]

加上这句也一样,还是中断。。。
gold_water 2012-07-04
  • 打赏
  • 举报
回复
第一列是用InsertItem函数,后面列使用SetItemText

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧