24,854
社区成员
发帖
与我相关
我的任务
分享
LRESULT ClistctrlOptions::OnMyRedrawItem( WPARAM item, LPARAM subitem ) //根据情况 发出重绘item 信号
{
if( item == 0xFFFFFFFE) // if item = -2, redraw whole list control 重绘整个list control
{
Invalidate(FALSE);
}
if( item==0xffffffff ) // item<0, mean redraw items[0,subitem] 重绘items[0,subitem]
{
RedrawItems( 0, subitem );
}
else
if( subitem==0xffffffff ) // subItem<0, mean Update item's all subitem. 重绘items[subitem,subitem]
{
RedrawItems( item, item );
}
else
{
if( subitem>=0 && subitem<MACRO_MaxSubItems )
{
int refrectsubitem = subitem ;
if( refrectsubitem>=0 )
{
CRect rect ;
if( GetSubItemRect( item, refrectsubitem, LVIR_LABEL, rect )==TRUE )
{
rect.left++ ;
rect.right-- ;
rect.top++ ;
rect.bottom-- ;
InvalidateRect( rect, FALSE ); // only update subitem, no need clear bgn.
}
}
}
}
return 0;
}
void ClistctrlOptions::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) //重绘函数
{
LPDRAWITEMSTRUCT lpDIS = lpDrawItemStruct;
int nItem=lpDIS->itemID; //将要重绘的行值
if(nItem == -1)
return ;
CRect rcCol = lpDIS->rcItem; //这行的位置
CString sText;
CDC* pDC=CDC::FromHandle(lpDIS->hDC);
int nOldDCMode=pDC->SaveDC();
LVITEM item;
item.iItem = nItem;
item.iSubItem = 0;
item.mask = LVIF_IMAGE|LVIF_STATE;
item.stateMask = 0XFFFF;
GetItem(&item);
ListView_SetExtendedListViewStyle(this->m_hWnd, this->GetStyle() & ~LVS_EX_GRIDLINES);//不显示网格线
LV_COLUMN lvc;
lvc.mask=LVCF_FMT|LVCF_WIDTH;
rcCol.right = rcCol.left;
for(int nCol=0; GetColumn(nCol,&lvc); nCol++)
{
rcCol.left = rcCol.right;
rcCol.right = rcCol.left + GetColumnWidth(nCol);
::Rectangle(lpDIS->hDC, rcCol.left-1, rcCol.top-1 , rcCol.right , rcCol.bottom );
pDC->DrawText(sText, -1, CRect::CRect(rcCol.left+3,rcCol.top,rcCol.right,rcCol.bottom-2), DT_RIGHT);
}
pDC->RestoreDC(nOldDCMode);
}