15,980
社区成员




NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
*pResult = 0;
int nItem = -111;
int nSubItem = -111;
COLORREF clrNewTextColor, clrNewBkColor;
//Switch between different draw stages
switch (pLVCD->nmcd.dwDrawStage) {
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
*pResult = CDRF_NOTIFYSUBITEMDRAW;
break;
case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec); //获取当前重绘行索引
nSubItem = static_cast<int>(pLVCD->iSubItem); //获取当前重绘列索引
if (m_list.GetItemState(nItem, LVIS_FOCUSED|LVIS_SELECTED)) //如果重绘行就是选中的单元格所在的行
{
clrNewTextColor = RGB(255, 255, 255); //设置文本颜色
clrNewBkColor = RGB(255, 0, 0); //设置背景颜色
pLVCD->clrText = clrNewTextColor;
pLVCD->clrTextBk = clrNewBkColor;
}
else
{
clrNewTextColor = RGB(0, 0, 0);
clrNewBkColor = RGB(143, 193, 60);
pLVCD->clrText = clrNewTextColor;
pLVCD->clrTextBk = clrNewBkColor;
}
//else if (nSubItem == SelectCol) //如果重绘列是选中的单元格所在的列
//{
// clrNewTextColor = RGB(0, 0, 0);
// clrNewBkColor = RGB(230, 230, 250);
// pLVCD->clrText = clrNewTextColor;
// pLVCD->clrTextBk = clrNewBkColor;
//}
//else if (nSubItem > SelectCol) //只显示一列,如果没有这个判断就会显示后面所有列
//{
// clrNewTextColor = RGB(0, 0, 0);
// clrNewBkColor = RGB(255, 255, 255);
// pLVCD->clrText = clrNewTextColor;
// pLVCD->clrTextBk = clrNewBkColor;
//}
*pResult = CDRF_DODEFAULT;
break;
default:
break;
}
我想用NM_CUSTOMDRAW轻量级的自绘来实现,不知道如何做呢? DrawItem中重绘可以解决选中高亮颜色的问题
DrawItem中重绘可以解决选中高亮颜色的问题
void CListCtrlCl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: 添加您的代码以绘制指定项 TCHAR lpBuffer[256]; LV_ITEM lvi; lvi.mask = LVIF_TEXT | LVIF_PARAM ; lvi.iItem = lpDrawItemStruct->itemID ; lvi.iSubItem = 0; lvi.pszText = lpBuffer ; lvi.cchTextMax = sizeof(lpBuffer); VERIFY(GetItem(&lvi)); LV_COLUMN lvc, lvcprev ; ::ZeroMemory(&lvc, sizeof(lvc)); ::ZeroMemory(&lvcprev, sizeof(lvcprev)); lvc.mask = LVCF_WIDTH | LVCF_FMT; lvcprev.mask = LVCF_WIDTH | LVCF_FMT; CDC* pDC; pDC = CDC::FromHandle(lpDrawItemStruct->hDC); CRect rtClient; GetClientRect(&rtClient); for ( int nCol=0; GetColumn(nCol, &lvc); nCol++) { if ( nCol > 0 ) { // Get Previous Column Width in order to move the next display item GetColumn(nCol-1, &lvcprev) ; lpDrawItemStruct->rcItem.left += lvcprev.cx ; lpDrawItemStruct->rcItem.right += lpDrawItemStruct->rcItem.left; } CRect rcItem; if (!GetSubItemRect(lpDrawItemStruct->itemID,nCol,LVIR_LABEL,rcItem)) continue; ::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)); CRect rcTemp; rcTemp = rcItem; CRgn rgn1; RECT tr = { rcItem.left - 1, rcItem.top, rcItem.right, rcItem.bottom }; rgn1.CreateRectRgnIndirect(&tr); /*if (nCol==0) { rcTemp.left -=2; }*/ if (m_nCreatBtnCol == lvi.iSubItem)//按钮位置移动 { int cx = (rcTemp.left + rcTemp.right)/2; int cy = rcTemp.top+5; m_BtVect[lvi.iItem].m_Btn[0]->MoveWindow(cx - 45, cy, 40, 20); m_BtVect[lvi.iItem].m_Btn[1]->MoveWindow(cx + 5, cy, 40, 20); } if ( lpDrawItemStruct->itemState & ODS_SELECTED ) { COLORREF color = GetBkColor(); //获取背景颜色 //pDC->FillSolidRect(rcTemp,color); //内嵌窗体颜色绘制 CBrush brush1(color); pDC->FillRgn(&rgn1, &brush1); //内嵌窗体边框绘制 CBrush brush2(RGB(209, 209, 209)); pDC->FrameRgn(&rgn1, &brush2, 1, 1); brush1.DeleteObject(); brush2.DeleteObject(); /* //内嵌窗体颜色绘制 高亮处理 CBrush brush1(GetSysColor(COLOR_HIGHLIGHT)); pDC->FillRgn(&rgn1, &brush1); //内嵌窗体边框绘制 CBrush brush2(RGB(209, 209, 209)); pDC->FrameRgn(&rgn1, &brush2, 1, 1); brush1.DeleteObject(); brush2.DeleteObject(); //pDC->FillSolidRect(&rcTemp, GetSysColor(COLOR_HIGHLIGHT)) ; pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)); */ } else { COLORREF color = GetBkColor(); //获取背景颜色 //pDC->FillSolidRect(rcTemp,color); //内嵌窗体颜色绘制 CBrush brush1(color); pDC->FillRgn(&rgn1, &brush1); //内嵌窗体边框绘制 CBrush brush2(RGB(209, 209, 209)); pDC->FrameRgn(&rgn1, &brush2, 1, 1); brush1.DeleteObject(); brush2.DeleteObject(); if (FindColColor(nCol,color))//获取单元行颜色 { CBrush brush1(color); pDC->FillRgn(&rgn1, &brush1); //内嵌窗体边框绘制 CBrush brush2(RGB(209, 209, 209)); pDC->FrameRgn(&rgn1, &brush2, 1, 1); brush1.DeleteObject(); brush2.DeleteObject();; } if (FindItemColor(nCol,lpDrawItemStruct->itemID,color))//获取单元格颜色 { CBrush brush1(color); pDC->FillRgn(&rgn1, &brush1); //内嵌窗体边框绘制 CBrush brush2(RGB(209, 209, 209)); pDC->FrameRgn(&rgn1, &brush2, 1, 1); brush1.DeleteObject(); brush2.DeleteObject();; } //pDC->SetTextColor(m_color); } pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT)); UINT uFormat = DT_CENTER ; if (m_Header.m_Format[nCol]=='0') { uFormat = DT_LEFT; } else if (m_Header.m_Format[nCol]=='1') { uFormat = DT_CENTER; } else if (m_Header.m_Format[nCol]=='2') { uFormat = DT_RIGHT; } TEXTMETRIC metric; pDC->GetTextMetrics(&metric); int ofst; ofst = rcItem.Height() - metric.tmHeight; rcItem.OffsetRect(0,ofst/2); pDC->SetTextColor(m_color); COLORREF color; if (FindColTextColor(nCol,color)) { pDC->SetTextColor(color); } if (FindItemTextColor(nCol,lpDrawItemStruct->itemID,color)) { pDC->SetTextColor(color); } CFont nFont ,* nOldFont; nFont.CreateFont(m_fontHeight,m_fontWith,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_T("宋体"));//创建字体 nOldFont = pDC->SelectObject(&nFont); DrawText(lpDrawItemStruct->hDC, lpBuffer, _tcslen(lpBuffer), &rcItem, uFormat); pDC->SelectStockObject(SYSTEM_FONT) ; } } ———————————————— 版权声明:本文为CSDN博主「若歌」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_36568418/article/details/102922111void CListCtrlCl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: 添加您的代码以绘制指定项 TCHAR lpBuffer[256]; LV_ITEM lvi; lvi.mask = LVIF_TEXT | LVIF_PARAM ; lvi.iItem = lpDrawItemStruct->itemID ; lvi.iSubItem = 0; lvi.pszText = lpBuffer ; lvi.cchTextMax = sizeof(lpBuffer); VERIFY(GetItem(&lvi)); LV_COLUMN lvc, lvcprev ; ::ZeroMemory(&lvc, sizeof(lvc)); ::ZeroMemory(&lvcprev, sizeof(lvcprev)); lvc.mask = LVCF_WIDTH | LVCF_FMT; lvcprev.mask = LVCF_WIDTH | LVCF_FMT; CDC* pDC; pDC = CDC::FromHandle(lpDrawItemStruct->hDC); CRect rtClient; GetClientRect(&rtClient); for ( int nCol=0; GetColumn(nCol, &lvc); nCol++) { if ( nCol > 0 ) { // Get Previous Column Width in order to move the next display item GetColumn(nCol-1, &lvcprev) ; lpDrawItemStruct->rcItem.left += lvcprev.cx ; lpDrawItemStruct->rcItem.right += lpDrawItemStruct->rcItem.left; } CRect rcItem; if (!GetSubItemRect(lpDrawItemStruct->itemID,nCol,LVIR_LABEL,rcItem)) continue; ::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)); CRect rcTemp; rcTemp = rcItem; CRgn rgn1; RECT tr = { rcItem.left - 1, rcItem.top, rcItem.right, rcItem.bottom }; rgn1.CreateRectRgnIndirect(&tr); /*if (nCol==0) { rcTemp.left -=2; }*/ if (m_nCreatBtnCol == lvi.iSubItem)//按钮位置移动 { int cx = (rcTemp.left + rcTemp.right)/2; int cy = rcTemp.top+5; m_BtVect[lvi.iItem].m_Btn[0]->MoveWindow(cx - 45, cy, 40, 20); m_BtVect[lvi.iItem].m_Btn[1]->MoveWindow(cx + 5, cy, 40, 20); } if ( lpDrawItemStruct->itemState & ODS_SELECTED ) { COLORREF color = GetBkColor(); //获取背景颜色 //pDC->FillSolidRect(rcTemp,color); //内嵌窗体颜色绘制 CBrush brush1(color); pDC->FillRgn(&rgn1, &brush1); //内嵌窗体边框绘制 CBrush brush2(RGB(209, 209, 209)); pDC->FrameRgn(&rgn1, &brush2, 1, 1); brush1.DeleteObject(); brush2.DeleteObject(); /* //内嵌窗体颜色绘制 高亮处理 CBrush brush1(GetSysColor(COLOR_HIGHLIGHT)); pDC->FillRgn(&rgn1, &brush1); //内嵌窗体边框绘制 CBrush brush2(RGB(209, 209, 209)); pDC->FrameRgn(&rgn1, &brush2, 1, 1); brush1.DeleteObject(); brush2.DeleteObject(); //pDC->FillSolidRect(&rcTemp, GetSysColor(COLOR_HIGHLIGHT)) ; pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)); */ } else { COLORREF color = GetBkColor(); //获取背景颜色 //pDC->FillSolidRect(rcTemp,color); //内嵌窗体颜色绘制 CBrush brush1(color); pDC->FillRgn(&rgn1, &brush1); //内嵌窗体边框绘制 CBrush brush2(RGB(209, 209, 209)); pDC->FrameRgn(&rgn1, &brush2, 1, 1); brush1.DeleteObject(); brush2.DeleteObject(); if (FindColColor(nCol,color))//获取单元行颜色 { CBrush brush1(color); pDC->FillRgn(&rgn1, &brush1); //内嵌窗体边框绘制 CBrush brush2(RGB(209, 209, 209)); pDC->FrameRgn(&rgn1, &brush2, 1, 1); brush1.DeleteObject(); brush2.DeleteObject();; } if (FindItemColor(nCol,lpDrawItemStruct->itemID,color))//获取单元格颜色 { CBrush brush1(color); pDC->FillRgn(&rgn1, &brush1); //内嵌窗体边框绘制 CBrush brush2(RGB(209, 209, 209)); pDC->FrameRgn(&rgn1, &brush2, 1, 1); brush1.DeleteObject(); brush2.DeleteObject();; } //pDC->SetTextColor(m_color); } pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT)); UINT uFormat = DT_CENTER ; if (m_Header.m_Format[nCol]=='0') { uFormat = DT_LEFT; } else if (m_Header.m_Format[nCol]=='1') { uFormat = DT_CENTER; } else if (m_Header.m_Format[nCol]=='2') { uFormat = DT_RIGHT; } TEXTMETRIC metric; pDC->GetTextMetrics(&metric); int ofst; ofst = rcItem.Height() - metric.tmHeight; rcItem.OffsetRect(0,ofst/2); pDC->SetTextColor(m_color); COLORREF color; if (FindColTextColor(nCol,color)) { pDC->SetTextColor(color); } if (FindItemTextColor(nCol,lpDrawItemStruct->itemID,color)) { pDC->SetTextColor(color); } CFont nFont ,* nOldFont; nFont.CreateFont(m_fontHeight,m_fontWith,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_T("宋体"));//创建字体 nOldFont = pDC->SelectObject(&nFont); DrawText(lpDrawItemStruct->hDC, lpBuffer, _tcslen(lpBuffer), &rcItem, uFormat); pDC->SelectStockObject(SYSTEM_FONT) ; } }
void CListCtrlCl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: 添加您的代码以绘制指定项
TCHAR lpBuffer[256];
LV_ITEM lvi;
lvi.mask = LVIF_TEXT | LVIF_PARAM ;
lvi.iItem = lpDrawItemStruct->itemID ;
lvi.iSubItem = 0;
lvi.pszText = lpBuffer ;
lvi.cchTextMax = sizeof(lpBuffer);
VERIFY(GetItem(&lvi));
LV_COLUMN lvc, lvcprev ;
::ZeroMemory(&lvc, sizeof(lvc));
::ZeroMemory(&lvcprev, sizeof(lvcprev));
lvc.mask = LVCF_WIDTH | LVCF_FMT;
lvcprev.mask = LVCF_WIDTH | LVCF_FMT;
CDC* pDC;
pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rtClient;
GetClientRect(&rtClient);
for ( int nCol=0; GetColumn(nCol, &lvc); nCol++)
{
if ( nCol > 0 )
{
// Get Previous Column Width in order to move the next display item
GetColumn(nCol-1, &lvcprev) ;
lpDrawItemStruct->rcItem.left += lvcprev.cx ;
lpDrawItemStruct->rcItem.right += lpDrawItemStruct->rcItem.left;
}
CRect rcItem;
if (!GetSubItemRect(lpDrawItemStruct->itemID,nCol,LVIR_LABEL,rcItem))
continue;
::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));
CRect rcTemp;
rcTemp = rcItem;
CRgn rgn1;
RECT tr = { rcItem.left - 1, rcItem.top, rcItem.right, rcItem.bottom };
rgn1.CreateRectRgnIndirect(&tr);
/*if (nCol==0)
{
rcTemp.left -=2;
}*/
if (m_nCreatBtnCol == lvi.iSubItem)//按钮位置移动
{
int cx = (rcTemp.left + rcTemp.right)/2;
int cy = rcTemp.top+5;
m_BtVect[lvi.iItem].m_Btn[0]->MoveWindow(cx - 45, cy, 40, 20);
m_BtVect[lvi.iItem].m_Btn[1]->MoveWindow(cx + 5, cy, 40, 20);
}
if ( lpDrawItemStruct->itemState & ODS_SELECTED )
{
COLORREF color = GetBkColor(); //获取背景颜色
//pDC->FillSolidRect(rcTemp,color);
//内嵌窗体颜色绘制
CBrush brush1(color);
pDC->FillRgn(&rgn1, &brush1);
//内嵌窗体边框绘制
CBrush brush2(RGB(209, 209, 209));
pDC->FrameRgn(&rgn1, &brush2, 1, 1);
brush1.DeleteObject();
brush2.DeleteObject();
/* //内嵌窗体颜色绘制 高亮处理
CBrush brush1(GetSysColor(COLOR_HIGHLIGHT));
pDC->FillRgn(&rgn1, &brush1);
//内嵌窗体边框绘制
CBrush brush2(RGB(209, 209, 209));
pDC->FrameRgn(&rgn1, &brush2, 1, 1);
brush1.DeleteObject();
brush2.DeleteObject();
//pDC->FillSolidRect(&rcTemp, GetSysColor(COLOR_HIGHLIGHT)) ;
pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)); */
}
else
{
COLORREF color = GetBkColor(); //获取背景颜色
//pDC->FillSolidRect(rcTemp,color);
//内嵌窗体颜色绘制
CBrush brush1(color);
pDC->FillRgn(&rgn1, &brush1);
//内嵌窗体边框绘制
CBrush brush2(RGB(209, 209, 209));
pDC->FrameRgn(&rgn1, &brush2, 1, 1);
brush1.DeleteObject();
brush2.DeleteObject();
if (FindColColor(nCol,color))//获取单元行颜色
{
CBrush brush1(color);
pDC->FillRgn(&rgn1, &brush1);
//内嵌窗体边框绘制
CBrush brush2(RGB(209, 209, 209));
pDC->FrameRgn(&rgn1, &brush2, 1, 1);
brush1.DeleteObject();
brush2.DeleteObject();;
}
if (FindItemColor(nCol,lpDrawItemStruct->itemID,color))//获取单元格颜色
{
CBrush brush1(color);
pDC->FillRgn(&rgn1, &brush1);
//内嵌窗体边框绘制
CBrush brush2(RGB(209, 209, 209));
pDC->FrameRgn(&rgn1, &brush2, 1, 1);
brush1.DeleteObject();
brush2.DeleteObject();;
}
//pDC->SetTextColor(m_color);
}
pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
UINT uFormat = DT_CENTER ;
if (m_Header.m_Format[nCol]=='0')
{
uFormat = DT_LEFT;
}
else if (m_Header.m_Format[nCol]=='1')
{
uFormat = DT_CENTER;
}
else if (m_Header.m_Format[nCol]=='2')
{
uFormat = DT_RIGHT;
}
TEXTMETRIC metric;
pDC->GetTextMetrics(&metric);
int ofst;
ofst = rcItem.Height() - metric.tmHeight;
rcItem.OffsetRect(0,ofst/2);
pDC->SetTextColor(m_color);
COLORREF color;
if (FindColTextColor(nCol,color))
{
pDC->SetTextColor(color);
}
if (FindItemTextColor(nCol,lpDrawItemStruct->itemID,color))
{
pDC->SetTextColor(color);
}
CFont nFont ,* nOldFont;
nFont.CreateFont(m_fontHeight,m_fontWith,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_T("宋体"));//创建字体
nOldFont = pDC->SelectObject(&nFont);
DrawText(lpDrawItemStruct->hDC, lpBuffer, _tcslen(lpBuffer), &rcItem, uFormat);
pDC->SelectStockObject(SYSTEM_FONT) ;
}
}
————————————————
版权声明:本文为CSDN博主「若歌」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36568418/article/details/102922111void CListCtrlCl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: 添加您的代码以绘制指定项
TCHAR lpBuffer[256];
LV_ITEM lvi;
lvi.mask = LVIF_TEXT | LVIF_PARAM ;
lvi.iItem = lpDrawItemStruct->itemID ;
lvi.iSubItem = 0;
lvi.pszText = lpBuffer ;
lvi.cchTextMax = sizeof(lpBuffer);
VERIFY(GetItem(&lvi));
LV_COLUMN lvc, lvcprev ;
::ZeroMemory(&lvc, sizeof(lvc));
::ZeroMemory(&lvcprev, sizeof(lvcprev));
lvc.mask = LVCF_WIDTH | LVCF_FMT;
lvcprev.mask = LVCF_WIDTH | LVCF_FMT;
CDC* pDC;
pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rtClient;
GetClientRect(&rtClient);
for ( int nCol=0; GetColumn(nCol, &lvc); nCol++)
{
if ( nCol > 0 )
{
// Get Previous Column Width in order to move the next display item
GetColumn(nCol-1, &lvcprev) ;
lpDrawItemStruct->rcItem.left += lvcprev.cx ;
lpDrawItemStruct->rcItem.right += lpDrawItemStruct->rcItem.left;
}
CRect rcItem;
if (!GetSubItemRect(lpDrawItemStruct->itemID,nCol,LVIR_LABEL,rcItem))
continue;
::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));
CRect rcTemp;
rcTemp = rcItem;
CRgn rgn1;
RECT tr = { rcItem.left - 1, rcItem.top, rcItem.right, rcItem.bottom };
rgn1.CreateRectRgnIndirect(&tr);
/*if (nCol==0)
{
rcTemp.left -=2;
}*/
if (m_nCreatBtnCol == lvi.iSubItem)//按钮位置移动
{
int cx = (rcTemp.left + rcTemp.right)/2;
int cy = rcTemp.top+5;
m_BtVect[lvi.iItem].m_Btn[0]->MoveWindow(cx - 45, cy, 40, 20);
m_BtVect[lvi.iItem].m_Btn[1]->MoveWindow(cx + 5, cy, 40, 20);
}
if ( lpDrawItemStruct->itemState & ODS_SELECTED )
{
COLORREF color = GetBkColor(); //获取背景颜色
//pDC->FillSolidRect(rcTemp,color);
//内嵌窗体颜色绘制
CBrush brush1(color);
pDC->FillRgn(&rgn1, &brush1);
//内嵌窗体边框绘制
CBrush brush2(RGB(209, 209, 209));
pDC->FrameRgn(&rgn1, &brush2, 1, 1);
brush1.DeleteObject();
brush2.DeleteObject();
/* //内嵌窗体颜色绘制 高亮处理
CBrush brush1(GetSysColor(COLOR_HIGHLIGHT));
pDC->FillRgn(&rgn1, &brush1);
//内嵌窗体边框绘制
CBrush brush2(RGB(209, 209, 209));
pDC->FrameRgn(&rgn1, &brush2, 1, 1);
brush1.DeleteObject();
brush2.DeleteObject();
//pDC->FillSolidRect(&rcTemp, GetSysColor(COLOR_HIGHLIGHT)) ;
pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)); */
}
else
{
COLORREF color = GetBkColor(); //获取背景颜色
//pDC->FillSolidRect(rcTemp,color);
//内嵌窗体颜色绘制
CBrush brush1(color);
pDC->FillRgn(&rgn1, &brush1);
//内嵌窗体边框绘制
CBrush brush2(RGB(209, 209, 209));
pDC->FrameRgn(&rgn1, &brush2, 1, 1);
brush1.DeleteObject();
brush2.DeleteObject();
if (FindColColor(nCol,color))//获取单元行颜色
{
CBrush brush1(color);
pDC->FillRgn(&rgn1, &brush1);
//内嵌窗体边框绘制
CBrush brush2(RGB(209, 209, 209));
pDC->FrameRgn(&rgn1, &brush2, 1, 1);
brush1.DeleteObject();
brush2.DeleteObject();;
}
if (FindItemColor(nCol,lpDrawItemStruct->itemID,color))//获取单元格颜色
{
CBrush brush1(color);
pDC->FillRgn(&rgn1, &brush1);
//内嵌窗体边框绘制
CBrush brush2(RGB(209, 209, 209));
pDC->FrameRgn(&rgn1, &brush2, 1, 1);
brush1.DeleteObject();
brush2.DeleteObject();;
}
//pDC->SetTextColor(m_color);
}
pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
UINT uFormat = DT_CENTER ;
if (m_Header.m_Format[nCol]=='0')
{
uFormat = DT_LEFT;
}
else if (m_Header.m_Format[nCol]=='1')
{
uFormat = DT_CENTER;
}
else if (m_Header.m_Format[nCol]=='2')
{
uFormat = DT_RIGHT;
}
TEXTMETRIC metric;
pDC->GetTextMetrics(&metric);
int ofst;
ofst = rcItem.Height() - metric.tmHeight;
rcItem.OffsetRect(0,ofst/2);
pDC->SetTextColor(m_color);
COLORREF color;
if (FindColTextColor(nCol,color))
{
pDC->SetTextColor(color);
}
if (FindItemTextColor(nCol,lpDrawItemStruct->itemID,color))
{
pDC->SetTextColor(color);
}
CFont nFont ,* nOldFont;
nFont.CreateFont(m_fontHeight,m_fontWith,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_T("宋体"));//创建字体
nOldFont = pDC->SelectObject(&nFont);
DrawText(lpDrawItemStruct->hDC, lpBuffer, _tcslen(lpBuffer), &rcItem, uFormat);
pDC->SelectStockObject(SYSTEM_FONT) ;
}
}