改变里面的内容:特别是字体,有二种方法:
- (一)系统画,但会出现选中时有系统的"蓝条"存在,字体本身的颜色看不到
具体查看:NM_CUSTOMDRAW 的使用方法
XXX.h中
afx_msg void onCustomDrawList ( NMHDR* pNMHDR, LRESULT* pResult
);
XXX.cpp
BEGIN_MESSAGE_MAP(CControlListCtrl,
CEditableListCtrl)
//{{AFX_MSG_MAP(CControlListCtrl)
//}}AFX_MSG_MAP
ON_NOTIFY_REFLECT ( NM_CUSTOMDRAW,
onCustomDrawList )
END_MESSAGE_MAP()
void CControlListCtrl::onCustomDrawList( NMHDR* pNMHDR, LRESULT*
pResult )
{
NMLVCUSTOMDRAW* pLVCD =
reinterpret_cast<NMLVCUSTOMDRAW*>(
pNMHDR );
if ( CDDS_PREPAINT ==
pLVCD->nmcd.dwDrawStage )
{
*pResult =
CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT ==
pLVCD->nmcd.dwDrawStage )
{
*pResult |=
CDRF_DODEFAULT;
*pResult |=
CDRF_NOTIFYSUBITEMDRAW;
}
else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) ==
pLVCD->nmcd.dwDrawStage)
{
pLVCD->clrText =
COLOUR_ALARM;
std::map<unsigned
int, bool>::iterator it =
m_setValueActionAllowed.find(static_cast<unsigned
int>(pLVCD->nmcd.lItemlParam));
try
{
if (it !=
m_setValueActionAllowed.end() &&
(*it).second)
{
//
normal colour
pLVCD->clrText
= COLOUR_NORMAL; // black
}
else
{
pLVCD->clrText
= COLOUR_DISABLE; // grey
}
}
catch(...)
{
pLVCD->clrText
= COLOUR_DISABLE; // grey
}
if (CONTROL_STATE_COLUMN ==
pLVCD->iSubItem )
{
try
{
TA_Base_Bus::EDataPointControlState
controlState = noControl;
TA_Base_Bus::DataPointProxySmartPtr&
dataPoint =
m_equipment->getChildDataPoint(static_cast<unsigned
int>(pLVCD->nmcd.lItemlParam));
controlState
= dataPoint->getControlState();
if
((controlState == LCC_failed) ||
(controlState
== RCC_failed) ||
(controlState
== comms_failed))
{
pLVCD->clrText
=
COLOUR_ALARM;
//
red
}
}
catch
(...)
{
}
}
*pResult =
CDRF_DODEFAULT;
}
}
- (二)自己画,将LIST属性表中的owner
draw fixed设成true.然后得载DrawItem
- 此时可以自己画不受系统的选中颜色干扰
void TrainList::DrawItem(LPDRAWITEMSTRUCT
lpDrawItemStruct)
{
TCHAR lpBuffer[256];
LV_COLUMN lvc, lvcprev ;
::ZeroMemory(&lvc,
sizeof(lvc));
lvc.mask = LVCF_WIDTH | LVCF_FMT;
long hight = 0;
for ( int nCol=0; GetColumn(nCol,
&lvc); nCol++)
{
lpDrawItemStruct->rcItem.left
+= hight ;
lpDrawItemStruct->rcItem.right
+= hight ;
hight = lvc.cx ;
LV_ITEM lvi;
::ZeroMemory(&lvi,
sizeof(lvi));
lvi.iItem =
lpDrawItemStruct->itemID;
lvi.mask = LVIF_TEXT |
LVIF_PARAM;
lvi.iSubItem = nCol;
lvi.pszText = lpBuffer;
lvi.cchTextMax =
sizeof(lpBuffer);
VERIFY(GetItem(&lvi));
CDC* pDC;
pDC =
CDC::FromHandle(lpDrawItemStruct->hDC);
if (
lpDrawItemStruct->itemState &
ODS_SELECTED )
{
pDC->FillSolidRect(&lpDrawItemStruct->rcItem,RGB(231,
243, 229)) ;
pDC->SetTextColor(RGB(255,
0, 0)) ;
}
else
{
pDC->FillSolidRect(&lpDrawItemStruct->rcItem,
GetSysColor(COLOR_WINDOW)) ;
pDC->SetTextColor(GetSysColor(COLOR_WINDOWTEXT))
;
}
//CFont lfont;
//lfont.CreateFont(14, 0, 0, 0,
FW_BOLD ,0, 1, 0, GB2312_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH
,"Consolas");
//CFont* pold =
pDC->SelectObject(&lfont);
::DrawText(lpDrawItemStruct->hDC,
lpBuffer, strlen(lpBuffer),
&lpDrawItemStruct->rcItem, DT_LEFT)
;
//pDC->SelectStockObject(SYSTEM_FONT)
;
}
}
(三)这个是用来设置行高的.这个做得很不好...
CImageList m_imagelist;
m_imagelist.Create(48, 48, ILC_COLOR32 , 5,
5);
this->m_ListCtr.SetImageList(&m_imagelist,
LVSIL_SMALL);
(四)这个是用来设置字体写入的位置
void CControlListCtrl::DrawItem(LPDRAWITEMSTRUCT
lpDrawItemStruct)
{
CRect lrect =
lpDrawItemStruct->rcItem;
lrect.DeflateRect(85, 0, 0, 0);
DrawText(lpDrawItemStruct->hDC, lpBuffer,
strlen(lpBuffer), &lrect, DT_LEFT) ;
}
http://s15/middle/52cbfc3fg9d8b8ca471ce&690
void CNewListCtrl::DrawItem(LPDRAWITEMSTRUCT
lpDrawItemStruct)
{
TRACE("need draw item\n");
CDC *pdc =
CDC::FromHandle(lpDrawItemStruct->hDC);
CRect lrect =
lpDrawItemStruct->rcItem;
CBrush lb;
lb.CreateSolidBrush(RGB(234,233, 225));
pdc->FrameRect(&lrect,
&lb);
lrect.DeflateRect(0, 0, 1, 1);
LVITEM rItem;
char buf[255];
rItem.mask = LVIF_TEXT | LVIF_STATE;
rItem.iItem =
lpDrawItemStruct->itemID;
rItem.iSubItem = 1;
memset(buf, 0, 255);
rItem.pszText = buf;
rItem.cchTextMax = 255;
rItem.stateMask = LVIS_SELECTED;
BOOL ret =
this->GetItem(&rItem);
if (rItem.state &
LVIS_SELECTED)
pdc->FillSolidRect(lrect,
RGB(231, 243, 229));
else
pdc->FillSolidRect(lrect,
RGB(255, 255, 255));
CDC ldc;
ldc.CreateCompatibleDC(pdc);
CBitmap lbmp;
lbmp.CreateCompatibleBitmap(pdc, ICON_SHOW_SIZE,
ICON_SHOW_SIZE);
ldc.SelectObject(lbmp);
//ldc.DrawIcon(0, 0, m_hIcon);
m_imagelist.Draw(&ldc,
lpDrawItemStruct->itemID % 2, CPoint(0, 0),
ILD_TRANSPARENT);
BLENDFUNCTION ab;
ab.BlendOp = AC_SRC_OVER;
ab.BlendFlags = 0;
ab.SourceConstantAlpha = 0xFF;
ab.AlphaFormat = AC_SRC_ALPHA;
AlphaBlend(pdc->GetSafeHdc(),
lrect.left, lrect.top, ICON_SHOW_SIZE, ICON_SHOW_SIZE,
ldc.GetSafeHdc(), 0, 0, ICON_SHOW_SIZE, ICON_SHOW_SIZE, ab);
CFont lfont;
lfont.CreateFont(12, 0, 0, 0, FW_BOLD ,0, 1, 0,
GB2312_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH ,"宋体");
CFont* pold =
pdc->SelectObject(&lfont);
lrect.DeflateRect(ICON_SHOW_SIZE + 2, 6, 0,
0);
pdc->DrawText("ACESEE 10", lrect,
DT_LEFT | DT_TOP | DT_SINGLELINE);
pdc->SelectObject(pold);
CString itemtext = rItem.pszText;
pdc->SetTextColor(RGB(223, 0,
0));
lrect.DeflateRect(85, 0, 0, 0);
pdc->DrawText("热", lrect, DT_LEFT
| DT_TOP | DT_SINGLELINE);
pdc->SetTextColor(RGB(0,128,0));
lrect.DeflateRect(-85, 17, 0, 0);
pdc->DrawText(itemtext, lrect,
DT_VCENTER | DT_LEFT | DT_SINGLELINE);
pdc->SetTextColor(RGB(0,0,0));
}
加载中,请稍候......