重写CHeaderCtrl,主要是改变颜色 。结果列头就顶层一行改变了颜色,大部分颜色没有变,见附件!不知道原因在哪?请指教主要方法如下:
1、CListCtrl& ListCtrl = GetListCtrl();
ListCtrl.InsertColumn(0,"存储设备名",LVCFMT_LEFT,200);
//m_list.InsertColumn(1,"大小",LVCFMT_LEFT,150);
ListCtrl.InsertColumn(1,"备注",LVCFMT_LEFT,300);
ListCtrl.InsertColumn(2,"IP",LVCFMT_LEFT,200);
m_NewHeaderFont.CreatePointFont(190,"MS Serif"); CHeaderCtrl* pHeader = NULL;
//pHeader=ListCtrl.GetHeaderCtrl();
pHeader = (CHeaderCtrl*)(ListCtrl.GetDlgItem(0)); if(pHeader==NULL)
return;
VERIFY(m_HeaderCtrl.SubclassWindow(pHeader->m_hWnd)); //A BIGGER FONT MAKES THE CONTROL BIGGER
m_HeaderCtrl.SetFont(&m_NewHeaderFont);
//m_HeaderCtrl.set
HDITEM hdItem; hdItem.mask = HDI_FORMAT;
int i;
for(i=0; i<m_HeaderCtrl.GetItemCount(); i++)
{
m_HeaderCtrl.GetItem(i,&hdItem); hdItem.fmt|= HDF_OWNERDRAW;
m_HeaderCtrl.SetItem(i,&hdItem);
}
2、
void CHeaderCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{ ASSERT(lpDrawItemStruct->CtlType == ODT_HEADER); HDITEM hdi;
TCHAR lpBuffer[256]; hdi.mask = HDI_TEXT;
hdi.pszText = lpBuffer;
hdi.cchTextMax = 256; GetItem(lpDrawItemStruct->itemID, &hdi);
CDC* pDC;
pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CBrush brush;
//////////////////
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(RGB(0,0,242));
pDC->SetBkMode(TRANSPARENT);
brush.CreateSolidBrush(RGB(0,0,242));
CRect rect = lpDrawItemStruct->rcItem;
//THIS FONT IS ONLY FOR DRAWING AS LONG AS WE DON'T DO A SetFont(...)
CBrush *pOldBrush=pDC->SelectObject(&brush);
pDC->FillRect(&rect,&brush);
pDC->FillRect(&rect,&brush);
pDC->SelectObject(pOldBrush);
pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
//DRAW THE TEXT
lpDrawItemStruct->rcItem.top += 6;
::DrawText(lpDrawItemStruct->hDC,lpBuffer,strlen(lpBuffer),
&lpDrawItemStruct->rcItem,HDI_FORMAT);
pDC->SelectStockObject(SYSTEM_FONT);
////////////////// //THIS FONT IS ONLY FOR DRAWING AS LONG AS WE DON'T DO A SetFont(...)
pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
// Draw the button frame.
::DrawFrameControl(lpDrawItemStruct->hDC,
&lpDrawItemStruct->rcItem, DFC_BUTTON, DFCS_BUTTONPUSH);
UINT uFormat = DT_CENTER;
//DRAW THE TEXT
::DrawText(lpDrawItemStruct->hDC, lpBuffer, strlen(lpBuffer),
&lpDrawItemStruct->rcItem, uFormat); pDC->SelectStockObject(SYSTEM_FONT);}
1、CListCtrl& ListCtrl = GetListCtrl();
ListCtrl.InsertColumn(0,"存储设备名",LVCFMT_LEFT,200);
//m_list.InsertColumn(1,"大小",LVCFMT_LEFT,150);
ListCtrl.InsertColumn(1,"备注",LVCFMT_LEFT,300);
ListCtrl.InsertColumn(2,"IP",LVCFMT_LEFT,200);
m_NewHeaderFont.CreatePointFont(190,"MS Serif"); CHeaderCtrl* pHeader = NULL;
//pHeader=ListCtrl.GetHeaderCtrl();
pHeader = (CHeaderCtrl*)(ListCtrl.GetDlgItem(0)); if(pHeader==NULL)
return;
VERIFY(m_HeaderCtrl.SubclassWindow(pHeader->m_hWnd)); //A BIGGER FONT MAKES THE CONTROL BIGGER
m_HeaderCtrl.SetFont(&m_NewHeaderFont);
//m_HeaderCtrl.set
HDITEM hdItem; hdItem.mask = HDI_FORMAT;
int i;
for(i=0; i<m_HeaderCtrl.GetItemCount(); i++)
{
m_HeaderCtrl.GetItem(i,&hdItem); hdItem.fmt|= HDF_OWNERDRAW;
m_HeaderCtrl.SetItem(i,&hdItem);
}
2、
void CHeaderCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{ ASSERT(lpDrawItemStruct->CtlType == ODT_HEADER); HDITEM hdi;
TCHAR lpBuffer[256]; hdi.mask = HDI_TEXT;
hdi.pszText = lpBuffer;
hdi.cchTextMax = 256; GetItem(lpDrawItemStruct->itemID, &hdi);
CDC* pDC;
pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CBrush brush;
//////////////////
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(RGB(0,0,242));
pDC->SetBkMode(TRANSPARENT);
brush.CreateSolidBrush(RGB(0,0,242));
CRect rect = lpDrawItemStruct->rcItem;
//THIS FONT IS ONLY FOR DRAWING AS LONG AS WE DON'T DO A SetFont(...)
CBrush *pOldBrush=pDC->SelectObject(&brush);
pDC->FillRect(&rect,&brush);
pDC->FillRect(&rect,&brush);
pDC->SelectObject(pOldBrush);
pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
//DRAW THE TEXT
lpDrawItemStruct->rcItem.top += 6;
::DrawText(lpDrawItemStruct->hDC,lpBuffer,strlen(lpBuffer),
&lpDrawItemStruct->rcItem,HDI_FORMAT);
pDC->SelectStockObject(SYSTEM_FONT);
////////////////// //THIS FONT IS ONLY FOR DRAWING AS LONG AS WE DON'T DO A SetFont(...)
pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
// Draw the button frame.
::DrawFrameControl(lpDrawItemStruct->hDC,
&lpDrawItemStruct->rcItem, DFC_BUTTON, DFCS_BUTTONPUSH);
UINT uFormat = DT_CENTER;
//DRAW THE TEXT
::DrawText(lpDrawItemStruct->hDC, lpBuffer, strlen(lpBuffer),
&lpDrawItemStruct->rcItem, uFormat); pDC->SelectStockObject(SYSTEM_FONT);}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货