在线等候:如何改变HeaderCtrl中的1个Item的字体及背景的颜色? ListCtrl的HeaderCtrl正常情况下是灰色背景及黑色的文字,如何在点击后1个item后,将其背景色改 为兰色,字符变成白色 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自绘。http://www.codeproject.com/listctrl/skinlist.asp http://www.codeproject.com/listctrl/skinlist.asp这个例子搞的太复杂,我只是改变一下前景及背景色,不会那么复杂吧?! 有点麻烦需要重载OnNMCustomdraw然后定义一个SetColor方法,调用他设定前\背色,RedrawItems ok1234567(ok1234567)大侠能否给点代码? 我用OnNMCustomdraw方法倒是可以到下面的item的前景及背景色可以任意改变,但就不知道如何改HeaderCtrl中的Item的前景及背景色 重新绘制表头,很麻烦的1、新建一个CHeaderCtrl的继承类,比如CColorHeaderCtrl2、在这个类中定义一个表头的结构数组:文字、格式、背景、前景、宽度等3、写一个方法:SetHeaderData(...),初始化表头数据4、重载DrawItem类似:void CColorHeaderCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { // TODO: Add your message handler code here and/or call default CDC *pDC = new CDC ; pDC->Attach(lpDrawItemStruct->hDC) ; CBrush *pNewBrush = new CBrush(RGB(255,0,0)); );//从定义数据中取 CBrush *pOldBrush = pDC->SelectObject(pNewBrush); pDC->Rectangle(&lpDrawItemStruct->rcItem) ; pDC->SetBkMode(0); pDC->SetTextColor(RGB(255,255,255)); pDC->DrawText("1234",&lpDrawItemStruct->rcItem,LVCFMT_LEFT);//内容从定义数据中取 pDC->SelectObject(pOldBrush); pDC->Detach(); delete pDC; }5、在你的颜色列表类中子类化m_ColorHeader,形如:void CColorListCtrl::PreSubclassWindow() { CListCtrl::PreSubclassWindow(); m_ColorHeader.SubclassWindow( ::GetDlgItem(m_hWnd,0) );}6、在合适的地方,将m_ColorHeader中的Item定义为自绘制代码为: HDITEM hdItem; hdItem.mask = HDI_FORMAT; for(int i=0; i<m_ColorHeader.GetItemCount(); i++) { m_ColorHeader.GetItem(i,&hdItem); hdItem.fmt |= HDF_OWNERDRAW; m_ColorHeader.SetItem(i,&hdItem); }至此,你应该有了一个自定义的可以控制表头前、背景颜色的新 CColorListCtrl 类 求助 MFC 消息发送 我要是写成strcpy(this->name,name);一样吗?有什么区别吗? 问一个简单的问题 有关指针的 如何获取固定网卡的MAC地址 谁 有 M S D N 哪儿有关于用MFC扩展DLL做对话框dll,供其他工程中调用来显示此对话框,谢谢,(急) 急,浏览器控件作网页编辑器的问题 急求各位高手来帮我解决有关twain扫描仪的问题!!!!!!!!!!!!! regsvr32 的问题 在将网页保存至数据库时,怎样将其相关的图片一起保存? 关于驱动打包的问题 MFC中图形保存问题
这个例子搞的太复杂,我只是改变一下前景及背景色,不会那么复杂吧?!
需要重载OnNMCustomdraw
然后定义一个SetColor方法,调用他设定前\背色,RedrawItems
1、新建一个CHeaderCtrl的继承类,比如CColorHeaderCtrl
2、在这个类中定义一个表头的结构数组:文字、格式、背景、前景、宽度等
3、写一个方法:SetHeaderData(...),初始化表头数据
4、重载DrawItem
类似:
void CColorHeaderCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your message handler code here and/or call default
CDC *pDC = new CDC ;
pDC->Attach(lpDrawItemStruct->hDC) ;
CBrush *pNewBrush = new CBrush(RGB(255,0,0)); );//从定义数据中取
CBrush *pOldBrush = pDC->SelectObject(pNewBrush);
pDC->Rectangle(&lpDrawItemStruct->rcItem) ;
pDC->SetBkMode(0);
pDC->SetTextColor(RGB(255,255,255));
pDC->DrawText("1234",&lpDrawItemStruct->rcItem,LVCFMT_LEFT);//内容从定义数据中取
pDC->SelectObject(pOldBrush);
pDC->Detach();
delete pDC;
}
5、在你的颜色列表类中子类化m_ColorHeader,形如:
void CColorListCtrl::PreSubclassWindow()
{
CListCtrl::PreSubclassWindow();
m_ColorHeader.SubclassWindow( ::GetDlgItem(m_hWnd,0) );
}6、在合适的地方,将m_ColorHeader中的Item定义为自绘制
代码为:
HDITEM hdItem;
hdItem.mask = HDI_FORMAT;
for(int i=0; i<m_ColorHeader.GetItemCount(); i++)
{
m_ColorHeader.GetItem(i,&hdItem);
hdItem.fmt |= HDF_OWNERDRAW;
m_ColorHeader.SetItem(i,&hdItem);
}至此,你应该有了一个自定义的可以控制表头前、背景颜色的新 CColorListCtrl 类