一个基于Dialog迷你型应用程序,我加入一按钮和一个listctrl(ID:IDC_LIST_DATA),在MyDlg类中我加入了CListCtrl* plistdata;
在MyDlg的OnPaint() 中:
CListCtrl* plistdata=new CListCtrl;
plistdata->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_NOSORTHEADER|LVS_EDITLABELS,
CRect(390,260,900,560),this,IDC_LIST_DATA);
。。//建列语句
以上一切正常运行并成功建立了想要的ListCtrl控件
但我在按钮的BN_CLICKED事件响应函数中加了2行:
plistdata->InsertItem(&lvItem);
plistdata->SetItemText(0,0,"hh");
运行出现非法操作,望各位大虾指导(lvItem 是我定义好的LV_ITEM变量以在构造函数中初始化)
在MyDlg的OnPaint() 中:
CListCtrl* plistdata=new CListCtrl;
plistdata->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_NOSORTHEADER|LVS_EDITLABELS,
CRect(390,260,900,560),this,IDC_LIST_DATA);
。。//建列语句
以上一切正常运行并成功建立了想要的ListCtrl控件
但我在按钮的BN_CLICKED事件响应函数中加了2行:
plistdata->InsertItem(&lvItem);
plistdata->SetItemText(0,0,"hh");
运行出现非法操作,望各位大虾指导(lvItem 是我定义好的LV_ITEM变量以在构造函数中初始化)
plistdata->InsertColumn(0,"条目1");
plistdata->InsertColumn(1,"条目2");
// 等...
// 然后就可以添加了
plistdata->InsertItem(&lvItem);
plistdata->SetItemText(0,0,"hh");
plistdata->InsertColumn(1,"条目2"); 奇怪的是把plistdata->InsertItem(&lvItem);
plistdata->SetItemText(0,0,"hh");紧跟在后面可以,放在按钮触发函数中就有问题,难倒我了
CListCtrl* plistdata=new CListCtrl;
plistdata->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_NOSORTHEADER|LVS_EDITLABELS,
CRect(390,260,900,560),this,IDC_LIST_DATA);
把CListCtrl* plistdata=new CListCtrl;这一句去掉CListCtrl* 改为plistdata=new CListCtrl;
BOOL CMyDlg::OnInitDialog()
{
plistdata=new CListCtrl;
plistdata->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_NOSORTHEADER|LVS_EDITLABELS,
CRect(390,260,900,560),this,IDC_LIST_DATA);
return TRUE;
}
因为一般情况下,OnPaint()函数会被系统多次调用,这样每一次调用都new一个新的列表控件,就算不考虑其他内存泄漏之类的问题,你添加的item也不会进入同一个列表控件里面。给你的CMyDlg类增加一个成员变量
CListCtrl m_wndListCtrl ;
在CMyDlg的OnCreate函数里面
m_wndListCtrl.Create(...);
在按钮触发函数中添加item.