ListBox自绘失败 ,
以下代码,被调用四次,导致data[0]被添加了四次
void CTestListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); //获得ListBox的dc
CRect rect=lpDrawItemStruct->rcItem;
pDC->DrawText(data[0], lstrlen(data[0]),rect, DT_LEFT | DT_SINGLELINE);
}
在构造函数中 :
CTestListBox::CTestListBox()
{
data.push_back(_T("xx"));
}
在对话框中: 放了个ListBox,该控件关联一个变量.....
以上的方法是不对的, 正确的是什么啊?
我想 让listBox实现自绘功能: 字体变大 。。。。。 又颜色。。。。
可是我没有做改颜色的操作, 什么的,就发现 ,相同的内容被添加了四次。。。。
意味着:pDC->DrawText(data[0], lstrlen(data[0]),rect, DT_LEFT | DT_SINGLELINE);
DrawText的第一个参数不能是datap[0],那么该是什么啊????
data : vector<CString>data;
是我要添加到ListBox中的内容
[解决办法]
控件自绘,其实就是在屏幕上画图,不要在里面添加项内容,内容是在外部 AddString时添加的。
这个 Data[0]不知你从哪儿来,内容应该从参数 LPDRAWITEMSTRUCT 中获取。
获取内容正常的做法是:
CString strItem = GetItemText( lpDIS->itemID, i );
pDC->DrawText(strItem, lstrlen(strItem)....
[解决办法]
内容是在外部 AddString时添加的。
获取内容正常的做法是:
CString strItem = GetItemText( lpDrawItemStruct->itemID, i );
pDC->DrawText(strItem, lstrlen(strItem)....
[解决办法]
两种方法,因为DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
1、通过lpDrawItemStruct传入需要重绘的项索引:itemID
你可以根据这个值,来确定你要重绘的信息,如你保存在vector中的信息vector[itemID].
2、通过lpDrawItemStruct传入需要重绘的项数据索引:itemData
你必须在建立listBox时为你的每个项绑定一个你能找到相应信息的指针,你可以根据这个值,来确定你要重绘的信息