重绘CListCtrl,重载了DrawItem函数,为啥在其中无法取到各行的文本?

PDD123 2010-08-20 11:40:34
代码如下:


void CTZListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: 添加您的代码以绘制指定项

HBRUSH hbr;//画背景
if(lpDrawItemStruct->itemState==17)
{
hbr=::CreateSolidBrush(RGB(187,203,255));
::FillRect(lpDrawItemStruct->hDC,&lpDrawItemStruct->rcItem,hbr);
}
else
{
hbr=::CreateSolidBrush(RGB(255,255,255));
::FillRect(lpDrawItemStruct->hDC,&lpDrawItemStruct->rcItem,hbr);
}

HPEN hpen=::CreatePen(PS_SOLID,1,RGB(236,233,216));//画格子
::SelectObject(lpDrawItemStruct->hDC,hpen);
::MoveToEx(lpDrawItemStruct->hDC,lpDrawItemStruct->rcItem.left,lpDrawItemStruct->rcItem.bottom,NULL);
::LineTo(lpDrawItemStruct->hDC,lpDrawItemStruct->rcItem.right,lpDrawItemStruct->rcItem.bottom);


LOGFONT lf;//以下将要用来显示文字
memset(&lf,0,sizeof(lf));
GetFont()->GetLogFont(&lf);
lf.lfCharSet = CHINESEBIG5_CHARSET;
// memcpy(lf.lfFaceName,"MingLiu",8);
HFONT hfont=::CreateFont(lf.lfHeight,lf.lfWidth,lf.lfEscapement,lf.lfOrientation,lf.lfWeight,lf.lfItalic,lf.lfUnderline,lf.lfStrikeOut,lf.lfCharSet,lf.lfOrientation,lf.lfClipPrecision,lf.lfQuality,lf.lfPitchAndFamily,lf.lfFaceName);

::SelectObject(lpDrawItemStruct->hDC,hfont);

CString itemtext=this->GetItemText(lpDrawItemStruct->itemID,0);//这里取文字,为啥都是空呢?试了GetItem函数也不行。
CString str;
str.Format("%d %s",lpDrawItemStruct->itemID,itemtext);

::TextOut(lpDrawItemStruct->hDC,lpDrawItemStruct->rcItem.left+5,lpDrawItemStruct->rcItem.top,str.GetBuffer(),str.GetLength());






::DeleteObject(hfont);
::DeleteObject(hpen);
::DeleteObject(hbr);

}




CString itemtext=this->GetItemText(lpDrawItemStruct->itemID,0);这里是我取出绘制的各行的第一列的文本,但是都取到一个空字符串,请问是何原因,要怎么解决?
...全文
123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
PDD123 2010-08-20
  • 打赏
  • 举报
回复
确实是编号的。
hztj2005 2010-08-20
  • 打赏
  • 举报
回复
LPDRAWITEMSTRUCT指向的是整个CListCtrl吧?其中的itemID应该是CListCtrl的ID,而不是各个栏目的编号。
PDD123 2010-08-20
  • 打赏
  • 举报
回复
我发现了。Owner Data要设置成False...
hztj2005 2010-08-20
  • 打赏
  • 举报
回复

有没有GetSubItemText成员函数。
liyinlei 2010-08-20
  • 打赏
  • 举报
回复
做了个最简单的,可以获取到字符串。 InsertItem的时候是否给相应的字符串了?

void CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{

CString str_text=GetItemText( lpDrawItemStruct->itemID, 0 );
::TextOut( lpDrawItemStruct->hDC, lpDrawItemStruct->rcItem.left, lpDrawItemStruct->rcItem.top, str_text, str_text.GetLength() );
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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