我建了一个类,继承自CListBox,在Create时只要加上LBS_OWNERDRAWVARIABLE再InsertString执行时就报错,源代码如下:
int CMyCustomView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here
MyList.Create(WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|LBS_OWNERDRAWVARIABLE,
CRect(0,0,100,160),this,0);
MyList.InsertString(0,"aaa");//如果去掉这句话就可以运行
return 0;
}MyList是建立的类,在CMyCustomView声明为成员变量
CCustomListBox MyList;
如果声明为
CListBox MyList;
也出现同样的问题,看来不是我建立的类的代码的问题,那是哪里的问题?

解决方案 »

  1.   

    你创建时使用了LBS_OWNERDRAWVARIABLE,说明这个ListBox的显示是由你自画的,
    而你没有重载CListBox的DrawItem虚函数,导致ListBox在绘制Item时出错。在这种情况下,就算你不调用InsertString,只要你在ListBox上鼠标单击一下同样会报错的。解决办法是:
    或者去掉LBS_OWNERDRAWVARIABLE属性,
    或者在你的CCustomListBox类中重载CListBox的DrawItem虚函数
      

  2.   

    楼上说得有点道理,但是不去掉OWERDRAW应该不会错吧?能够调用CListBoxe 的AddString()
    我觉得可能是不应该把InsertString 写OnCreate里,应该写在OnInitialUpdate()中吧
      

  3.   

    我重载了DrawItem和MeasureItem函数,同样还是报错