我想自己建一个函数void ShuaXin(),实现视图的更新!我的CMyView继承CListView();视图在初始化时调用的下面的函数,能正常运行!
void CMyView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
CListCtrl &m_ListCtrl = GetListCtrl();
&list= &m_ListCtrl;
CCourseSet cSet;
cSet.Open();
CODBCFieldInfo field;
for(UINT i=0;i<cSet.m_nFields;i++)
{
cSet.GetODBCFieldInfo(i,field);
m_ListCtrl.InsertColumn(i,field.m_strName,LVCFMT_LEFT,100);
} int nItem=0;
CString str;
while(!cSet.IsEOF())
{
for(UINT i=0;i<cSet.m_nFields;i++)
{
cSet.GetFieldValue(i,str);
if(i==0)
m_ListCtrl.InsertItem(nItem,str);
else
m_ListCtrl.SetItemText(nItem,i,str);
}
nItem++;
cSet.MoveNext();
}
cSet.Close();
但我刷新时,模仿的上面的代码能编译通过,但更细时会出错,void ShuaXin()的代码如下:
void CMyView::ShuaXin()
{
CListView::OnInitialUpdate();
CListCtrl &m_ListCtrl = GetListCtrl();
         m_ListCtrl.DeleteAllItems();
CCourseSet cSet;
cSet.Open();
int nItem=0;
CString str;
while(!cSet.IsEOF())
{
for(UINT i=0;i<cSet.m_nFields;i++)
{
cSet.GetFieldValue(i,str);
if(i==0)
m_ListCtrl.InsertItem(nItem,str);
else
m_ListCtrl.SetItemText(nItem,i,str);
}
nItem++;
cSet.MoveNext();
}
cSet.Close();
}
断点运行时卡到m_ListCtrl.DeleteAllItems()时出错,觉得是CListCtrl &m_ListCtrl = GetListCtrl()有错误,但不知道怎么修改!

解决方案 »

  1.   

    刷新时可能丢失了Listview的指针
      

  2.   

    去掉CListView::OnInitialUpdate();试试
      

  3.   

    我试过了,还是不行!运行时出现错误!部分提示:File:afxcmn.inl Line148
    For information on how your program can cause an assertion failure,see the Visual C++ documentation on asserts.
      

  4.   

    楼主的这个void ShuaXin()刷新是手动调用的么?用根据资源ID获取m_ListCtrl试试,或者把m_ListCtrl做为成员变量,在OnInitialUpdate()里对m_ListCtrl赋值。
      

  5.   

    CListView::OnInitialUpdate(); //这个屏蔽掉,
    CListCtrl &m_ListCtrl = GetListCtrl(); //看看这个是否取到值、?
      m_ListCtrl.DeleteAllItems();
      

  6.   

    点重试,看调用堆栈。分析
    CListCtrl &m_ListCtrl = GetListCtrl(); 
    之后m_ListCtrl 是否有效?
      

  7.   

    好像是我调用void CMyView::ShuaXin()出错了,我是在对话框里调用的,所以出错!我在CMyview里添加了个消息映射,然后把代码剪切过去,然后在菜单里调用刷新选项,实现了刷新!谢谢大家!分数送上!