一个比较变态的问题,是关于ListView的文字的设置问题

njtlxm 2004-05-03 11:49:13
我做了一个ListView,里面当然有很多item,每个item有图标和文字,但是遇到一个比较变态的用户,他不希望看见item中的文字,而是当鼠标移动到上面的时候显示tip,这个到是没有问题。由于种种原因,我不能将item上的文字设置为空,现在我想能否有办法把每个item上的文字隐藏起来?各位想想办法。比如设置文字本身为透明?还是把字体的大小设置为0?我都没有试验成功。
...全文
93 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
njtlxm 2004-05-08
我用其他方法实现了,不过还是谢谢。给分
  • 打赏
  • 举报
回复
UDX协议 2004-05-06
当然可以。
void CDlgDlg::OnCustomdrawList ( NMHDR* pNMHDR, LRESULT* pResult )
{
}
主要负责绘制列表。

用CDC::SetTextColor就可以改变文字的颜色。
说白了,和平时绘图没区别。
只是他限制你在一定区域内作图。
  • 打赏
  • 举报
回复
wangjs720 2004-05-06
把字体颜色设为背景色??
  • 打赏
  • 举报
回复
TO-----》 wwwllg(wwwllg)

我想在ListControl上面显示不同颜色的字体,不知道是否同一个问题?
用你的方法能否解决?
  • 打赏
  • 举报
回复
UDX协议 2004-05-04
这个问题可以解决。不过有点麻烦。

主要要响应一些Notify消息,用一个结构表示一条记录.
我给一段代码你,有什么问题发lglee@fiberhome.com.cn

BEGIN_MESSAGE_MAP(CDlgDlg, CDialog)
ON_WM_CONTEXTMENU()
//{{AFX_MSG_MAP(CDlgDlg)
ON_WM_QUERYDRAGICON()
ON_NOTIFY(NM_RCLICK, IDC_LIST1, OnRclickList1)
ON_WM_DESTROY()
ON_WM_WINDOWPOSCHANGED()
ON_WM_WINDOWPOSCHANGING()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_SIZE()
ON_NOTIFY(NM_SETFOCUS, IDC_LIST1, OnSetfocusList1)
ON_WM_MOVE()
ON_WM_MOVING()
ON_WM_ACTIVATE()
ON_WM_PARENTNOTIFY()
ON_WM_QUERYOPEN()
ON_WM_CREATE()
ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1)
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
ON_WM_TIMER()
//}}AFX_MSG_MAP
ON_NOTIFY( LVN_GETINFOTIP, IDC_LIST1,OnInfoTip )
ON_NOTIFY (LVN_GETDISPINFO, IDC_LIST1,OnGetDispInfo)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST1, OnCustomdrawList)
END_MESSAGE_MAP()
//
void CDlgDlg::OnInfoTip( NMHDR * pNMHDR, LRESULT * pResult )
{
NMLVGETINFOTIP* pInfoTip = reinterpret_cast<NMLVGETINFOTIP*>(pNMHDR);
ASSERT(pInfoTip);
CObjectItem *item =(CObjectItem *)m_cListCtrl.GetItemData(pInfoTip->iItem);
_tcscpy(pInfoTip->pszText,item->m_Discrip);
}


void CDlgDlg::OnGetDispInfo(NMHDR* pnmhdr, LRESULT* pResult)
{
// LV_DISPINFO* pdi = (LV_DISPINFO *) pnmhdr;
// if (LVIS_SELECTED == m_cListCtrl.GetItemState (pdi->item.iItem,
// LVIS_SELECTED))
// {
// pdi->item.iImage = 2;
// }
// else
// pdi->item.iImage = 2;
// if(m_cListCtrl.GetCheck(pdi->item.iItem))
// pdi->item.iImage = 0;

}
void CDlgDlg::OnCustomdrawList ( NMHDR* pNMHDR, LRESULT* pResult )
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
*pResult = 0;

if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
LVITEM rItem;
int nItem = static_cast<int>( pLVCD->nmcd.dwItemSpec );
if(nItem<0) return ;

CDC* pDC = CDC::FromHandle ( pLVCD->nmcd.hdc );
COLORREF crBkgnd;
BOOL bListHasFocus;
CRect rcItem;
CRect rcText;
CString sText;
UINT uFormat;

bListHasFocus = ( m_cListCtrl.GetSafeHwnd() == ::GetFocus() );

ZeroMemory ( &rItem, sizeof(LVITEM) );
rItem.mask = LVIF_IMAGE | LVIF_STATE;
rItem.iItem = nItem;
rItem.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
m_cListCtrl.GetItem ( &rItem );

CRect text,icon;
m_cListCtrl.GetItemRect( nItem, &rcItem, LVIR_BOUNDS );
m_cListCtrl.GetItemRect( nItem, &text, LVIR_LABEL );
m_cListCtrl.GetItemRect( nItem, &icon, LVIR_ICON );

if(m_bLargeIcon)
icon.left+=6;
CRect check(rcItem);//,icon(rcItem);

uFormat = ILD_TRANSPARENT;

if ( ( rItem.state & LVIS_SELECTED ) && bListHasFocus )
uFormat |= ILD_FOCUS;
CObjectItem *item =(CObjectItem *)m_cListCtrl.GetItemData(nItem);
if(item==NULL) return;
if(m_bLargeIcon )
{
check.top=check.top+(int)(check.Height()/3.0)-2;
check.left+=6;
check.right=check.left+(int)(check.Width()/3.0);
check.bottom=text.top;
check.DeflateRect(1,1);
///left icon
if(item->m_bCheck )
{
m_rImageListLarge.Draw ( pDC, 1, check.TopLeft(), uFormat );
m_cImageListNormal.Draw ( pDC, 0, icon.TopLeft(), uFormat );
}
else
{
m_rImageListLarge.Draw ( pDC, 0, check.TopLeft(), uFormat );
m_cImageListNormal.Draw ( pDC, 1, icon.TopLeft(), uFormat );
}
}
else
{

check.right=check.left+(int)(check.Width()/4.5);
check.DeflateRect(1,1);

if(item->m_bCheck )
{
m_rImageListSmall.Draw ( pDC, 1, check.TopLeft(), uFormat );
m_cImageListSmall.Draw ( pDC, 0, icon.TopLeft(), uFormat );
}
else
{
m_rImageListSmall.Draw ( pDC, 0, check.TopLeft(), uFormat );
m_cImageListSmall.Draw ( pDC, 1, icon.TopLeft(), uFormat );
}
}


m_cListCtrl.GetItemRect ( nItem, rcItem, LVIR_LABEL );


if ( rItem.state & LVIS_SELECTED )
{
item->m_bSelected=true;
pDC->SetTextColor(RGB(255,0,0));
}
else
{
item->m_bSelected=false;
crBkgnd = GetSysColor ( COLOR_WINDOW );
pDC->SetTextColor ( GetSysColor ( COLOR_BTNTEXT ));
}

pDC->SetBkMode ( TRANSPARENT );


rcText = rcItem;
rcText.left += 3;
rcText.top++;

sText = m_cListCtrl.GetItemText ( nItem, 0 );


pDC->DrawText ( sText, rcText, DT_VCENTER | DT_SINGLELINE );


if ( bListHasFocus && ( rItem.state & LVIS_FOCUSED ))
{
pDC->DrawFocusRect ( rcItem );
}

*pResult = CDRF_SKIPDEFAULT;
sText.ReleaseBuffer(0);
}

}

  • 打赏
  • 举报
回复
相关推荐
发帖
界面
加入

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2004-05-03 11:49
社区公告
暂无公告