解决方案 »
- 给对话框同时添加工具栏和状态栏时出现工具栏占满客户区的现象,请各位大侠指教
- 路由器下有三台机子,想拿其中一台做服务器?
- 关于DirectinputDevice8::GetDeviceInfo...为啥总是调用失败...
- 为什么我结束线程后 主程序跟着自动关闭了
- 郁闷加疑惑
- vc6中有WebBrowser控件吗
- MFC初学者问个小问题。。
- 关于使用GetDiskFreeSpaceEx()得到大硬盘信息时返回空?
- *****小手小脚之读取文件篇!!*****
- 在一个定时器里显示MessageBox,每来一个Timer消息就会出一个对话框,为什么?
- vc代码不联想了
- sdk程序中,为何不隐藏主窗口?
谁有 可指定行的背景色,前景色的列表控件-扩展CListCtrl类支持列排序,
这个控件的分享一下啊、、、、
哎,每分真难熬啊、、、
{
COLORREF clrNewBkColor;
int nItem = static_cast<int>( pLVCD->nmcd.dwItemSpec );
// if (pLVCD->iSubItem % 2 == 0)
// {
// clrNewBkColor = RGB(0xFF,0xFF,0xFF);
// }
// else
// {
// clrNewBkColor = RGB(0xFF,0x90,0x90);
// } if (nItem % 2 == 0)
{
clrNewBkColor = RGB(0x53,0xFF,0x53); //Set the bkgrnd color to green
}
else
{
clrNewBkColor = RGB(0xFF,0xFF,0xAA); //Set the bkgrnd color to red
}
pLVCD->clrTextBk = clrNewBkColor;
// Tell Windows to paint the control itself.
*pResult = CDRF_DODEFAULT;
}这段代码希望对你有点帮助
void Cxxx::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your message handler code here and/or call default
if (nIDCtl == IDC_LIST)
{
CListCtrl* pList = m_listxxx;
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
int nItem = lpDrawItemStruct->itemID;
BOOL bFocused = lpDrawItemStruct->itemState & ODS_FOCUS;
BOOL bSelected = lpDrawItemStruct->itemState & ODS_SELECTED; CRect rect, rectView;
GetClientRect(&rectView);
CRect rcItem(lpDrawItemStruct->rcItem);
CRect rcFocus(lpDrawItemStruct->rcItem);
CPen pen(PS_SOLID, 1, ::GetSysColor(COLOR_GRAYTEXT)); COLORREF clrOldText = pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
CFont *pOldFont = pDC->SelectObject(CAfxUtil::GetStockFont(FONT_NORMAL));
CPen *pOldPen = pDC->SelectObject(&pen);
int nBkMode = pDC->SetBkMode(TRANSPARENT); int nColNum = pList->GetHeaderCtrl()->GetItemCount();
int wid = rcItem.left;
for(int i = 0; i < nColNum; i++)
{
rect = rcItem;
rect.left = wid;
wid += pList->GetColumnWidth(i);
rect.right = wid;
//如果列不在客户区
if(rect.right <= rectView.left ||
rect.left >= rectView.right ||
rect.bottom <= rectView.top ||
rect.top >= rectView.bottom)
{
continue;
} if(rect.Width() <= 2)
{
continue;
} CRect rcSubItem(&rect);
//背景颜色和文本颜色
COLORREF clrBk, clrText;
if (bSelected && bFocused && (::GetFocus() == pList->m_hWnd))
{
clrBk = ::GetSysColor(COLOR_HIGHLIGHT);
clrText = ::GetSysColor(COLOR_HIGHLIGHTTEXT);
pDC->SelectObject(CAfxUtil::GetStockFont(FONT_NORMAL));
}
else
{
clrBk = ::GetSysColor(COLOR_WINDOW);
clrText = ::GetSysColor(COLOR_HIGHLIGHT);
pDC->SelectObject(CAfxUtil::GetStockFont(FONT_NORMAL));
} pDC->FillSolidRect(rect, RGB(0xFF, 0xFF, 0xE0));
pDC->SetTextColor(clrText);
if(clrBk != ::GetSysColor(COLOR_WINDOW))
{
pDC->FillSolidRect(&rcSubItem, clrBk);
} rcSubItem.InflateRect(-5, -0, -3, -1);
DWORD dwDrawStyle = DT_LEFT| DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX;
pDC->DrawText(pList->GetItemText(nItem, i), rcSubItem, dwDrawStyle);
pDC->MoveTo(rect.right-1, rect.top);
pDC->LineTo(rect.right-1, rect.bottom);
} pDC->MoveTo(0, rcItem.bottom-1);
pDC->LineTo(rcItem.right, rcItem.bottom-1); //画焦点矩形
if(bFocused && (::GetFocus() == pList->m_hWnd))
{
rcFocus.InflateRect(-2, -2);
pDC->DrawFocusRect(&rcFocus);
}
pDC->MoveTo(0, rcItem.bottom-1);
pDC->LineTo(rcItem.right, rcItem.bottom-1); pDC->SetTextColor(clrOldText);
pDC->SetBkMode(nBkMode);
pDC->SelectObject(pOldFont);
pDC->SelectObject( pOldPen );
pen.DeleteObject();
}
else
{
xx::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
}