SetItemText()出错

liyingzai 2010-03-20 11:20:23
编译时没有错误,运行时弹出下面的对话框:
winctrl2.cpp中Line:494为
BOOL CListCtrl::SetItemText(int nItem, int nSubItem, LPCTSTR lpszText)
{
ASSERT(::IsWindow(m_hWnd));
ASSERT((GetStyle() & LVS_OWNERDATA)==0);//Line 494
LVITEM lvi;
lvi.iSubItem = nSubItem;
lvi.pszText = (LPTSTR) lpszText;
return (BOOL) ::SendMessage(m_hWnd, LVM_SETITEMTEXT, nItem, (LPARAM)&lvi);
}


BOOL CListDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.
// UpdateData(false);
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here
m_ListCtrl.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE
|LVS_EX_GRIDLINES);
// m_ListCtrl.DeleteAllItems();
//初始化列表框的第一行
char *szColumn[]={"姓名","性别","时间","信息"};
int widths[]={70,40,70,100};
for(short ii=0;ii<sizeof(widths)/sizeof(int);ii++)
{
m_ListCtrl.InsertColumn(ii,szColumn[ii],LVCFMT_CENTER,widths[ii]);
}
m_ListCtrl.InsertItem(1,"ddd");
m_ListCtrl.SetItemText(0,1,"ssss");
//导入文件
/* CStdioFile file;
file.Open("F:\\c++\\List\\Debug\\list.txt",CFile::modeReadWrite);
CString str="";
int nCol=0;
int iRow=1;
while(file.ReadString(str))
{
if(nCol==0)
{
m_ListCtrl.InsertItem(iRow,str);
}
else
{
m_ListCtrl.SetItemText(iRow,nCol,str);
}
nCol=(++nCol)%5;
if(nCol==0)
iRow++;

}
//关闭文件
file.Close();*/


return TRUE; // return TRUE unless you set the focus to a control
}

...全文
234 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyingzai 2010-03-20
  • 打赏
  • 举报
回复
LVS_OWNERDATA我删掉了,还是不行啊
wwwxhb 2010-03-20
  • 打赏
  • 举报
回复
m_ListCtrl.InsertItem(1,"ddd");
怎么不从 0 开始
m_ListCtrl.SetItemText(0,1,"ssss");
看你不只一项吧。就插了一次。
后面的读取文件也看得不是很清楚。

up
arong1234 2010-03-20
  • 打赏
  • 举报
回复
带有LVS_OWNERDATA风格的列表框是一种虚拟列表框,它的“第n个元素是什么”的信息是受控的。这主要用于显示大数据量的情况,这种情况下,你通过InsertItem插入的元素不都会显示出来,而是通过某种机制来显示一部分,例如,你插入1000个,只有10个被显示。此时第1个元素,可能是实际的第788个元素
因此这种列表框禁止使用SetItemText,因为它不能保证你的第一个参数指向的元素真是你想要修改的。如果要用这个函数,必须把LVS_OWNERDATA风格从列表框风格中去掉

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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