CListCtrl获取文字

wangjiepro 2012-04-26 04:25:02
通过OnNMCustomdraw自绘了一个List,在CDDS_ITEMPREPAINT的时候通过GetItemText和GetItem获取文字,都获取不到,这是什么原因?代码如下:


void CTvListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);

if (pNMCD->dwDrawStage == CDDS_PREPAINT)
{
CRect rectClient;
GetClientRect(&rectClient);

CDC* pDC = CDC::FromHandle ( pNMCD->hdc );
pDC->FillSolidRect(&rectClient, RGB(243,247,250));

*pResult = CDRF_NOTIFYITEMDRAW;
return;
}
else if (pNMCD->dwDrawStage == CDDS_ITEMPREPAINT)
{
//获取不到。。。。
LVITEM hdItem;
TCHAR szText[256] = {0};
hdItem.mask = LVIF_TEXT;
hdItem.pszText = szText;
hdItem.cchTextMax = _countof(szText);

hdItem.iItem = 0;
hdItem.iSubItem = 0;
GetItem(&hdItem);

//同样获取不到。。。
CString strText = GetItemText(0, 0);

*pResult = CDRF_SKIPDEFAULT;
return;
}

*pResult = 0;
}


测试数据是通过InsertItem和SetItemText插入的

m_tvListCtrl.InsertItem(0, TEXT("1"));
m_tvListCtrl.SetItemText(0, 0, TEXT("2"));
m_tvListCtrl.SetItemText(0, 1, TEXT("3"));
m_tvListCtrl.SetItemText(0, 2, TEXT("4"));

...全文
206 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2012-04-27
  • 打赏
  • 举报
回复
向立天 2012-04-27
  • 打赏
  • 举报
回复
确实很奇怪
这有一个例子
实现的功能和你这个相似
你可以参考一下
http://download.csdn.net/detail/hurryboylqs/2668669
wangjiepro 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

LVHITTESTINFO ht ;
GetCursorPos(&(ht.pt)) ;

m_List.ScreenToClient(&ht.pt) ;
m_List.HitTest(&ht) ;

if(ht.iItem == -1) //检查是否有item选中,如果没选中则退出
 return ;

//继续其他操作
[/Quote]

pNMCD->dwDrawStage == CDDS_ITEMPREPAINT 这个stage的时候,pNMCD里就已经传过来的ItemId,我只是为了方便说明,直接把ItemId写成了0
wangjiepro 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

这个问题可能有些无聊
你的listctrl是report风格的么?
[/Quote]

是的,report风格
向立天 2012-04-26
  • 打赏
  • 举报
回复
这个问题可能有些无聊
你的listctrl是report风格的么?
zhuojohn 2012-04-26
  • 打赏
  • 举报
回复
LVHITTESTINFO ht ;
GetCursorPos(&(ht.pt)) ;

m_List.ScreenToClient(&ht.pt) ;
m_List.HitTest(&ht) ;

if(ht.iItem == -1) //检查是否有item选中,如果没选中则退出
 return ;

//继续其他操作
wangjiepro 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

HitTest 为什么不用
[/Quote]

能详细一点吗
zhuojohn 2012-04-26
  • 打赏
  • 举报
回复
HitTest 为什么不用
wangjiepro 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

确实执行到(pNMCD->dwDrawStage == CDDS_ITEMPREPAINT)这个分支了么
[/Quote]

执行到了,跟进去看了,AfxMessageBox也用着打过了,取到的都是空的。。。
向立天 2012-04-26
  • 打赏
  • 举报
回复
确实执行到(pNMCD->dwDrawStage == CDDS_ITEMPREPAINT)这个分支了么

15,979

社区成员

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

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