改变CListCtrlCHeaderCtrl高度字体颜色和背景.docxVIP

  • 4
  • 0
  • 约2.01千字
  • 约 2页
  • 2023-07-29 发布于山东
  • 举报

改变CListCtrlCHeaderCtrl高度字体颜色和背景.docx

改变CListCtrl、CHeaderCtrl高度、字体、颜色和背景 一、实现过程 表头改正 新建一个MFC类CHeaderCtrlCl,其基类为CHeaderCtrl,响应OnPaint消息实现自绘,实现代码请看源代码(由于代码较占篇幅,所以就不贴上来了,对不起),在头文件中定义函数 LRESULTOnLayout(WPARAMwParam,LPARAMlParam,)之后手动增添消息响应ON_MESSAGE(HDM_LAYOUT,OnLayout),在消息响应中改变高度,实现代码如下: LRESULTCHeaderCtrlCl::OnLayout(WPARAMwParam,LPARAMlParam) { LRESULTlResult=CHeaderCtrl::DefWindowProc(HDM_LAYOUT,0,lParam);HD_LAYOUThdl=*(HD_LAYOUT*)lParam; RECT*prc=hdl.prc; WINDOWPOS*pwpos=hdl.pwpos; intnHeight=(int)(pwpos-cy*m_Height);//改变高度,m_Height为倍数pwpos-cy=nHeight; prc-top=nHeight; returnlResult; } 表的改正 新建一个MFC类CListCtrlCl,其基类为CListCtrl,定义一个CHeaderCtrlCl的成员变量m_Header,重载 PreSubclassWindow( ),在函数中改正控件种类为自绘模式,然后子类化表头,代码如下: voidCListCtrlCl::PreSubclassWindow( ) { TODO:在此增添专用代码和/或调用基类 ModifyStyle(0,LVS_OWNERDRAWFIXED); CListCtrl::PreSubclassWindow( ); CHeaderCtrl*pHeader=GetHeaderCtrl( ); m_Header.SubclassWindow(pHeader-GetSafeHwnd( )); } 增添成员变量,保留一些基本信息。 CPtrListm_ptrListCol; //保留列颜色 CPtrListm_ptrListItem;// 保留Item颜色表 CPtrListm_colTextColor;// 保留列字体颜色 CPtrListm_ItemTextColor;// 保留单元格字体颜色 重载DrawItem( )实现自绘,实现代码请参照代码。手动增添消息宏ON_WM_MEASUREITEM_REFLECT( ),增添下面的函数,实现修转行高。 voidCListCtrlCl::MeasureItem(LPMEASUREITEMSTRUCTlpMeasureItemStruct) { if(m_nRowHeight0) { lpMeasureItemStruct-itemHeight=m_nRowHeight; } }增添消息办理OnMeasureItem( )voidCListCtrlCl::OnMeasureItem(intnIDCtl,LPMEASUREITEMSTRUCTlpMeasureItemStruct) { TODO:在此增添消息办理程序代码和/或调用默认值 CListCtrl::OnMeasureItem(nIDCtl,lpMeasureItemStruct); } 覆盖基类InsertColumn进队列信息保留 intCListCtrlCl::InsertColumn(intnCol,LPCTSTRlpszColumnHeading, intnFormat/*=LVCFMT_LEFT*/, intnWidth/*=-1*/, intnSubItem/*=-1*/) { m_Header.m_HChar.Add(lpszColumnHeading); if(nFormat==LVCFMT_LEFT) { m_Header.m_Format=m_Header.m_Format+0; } elseif(nFormat==LVCFMT_CENTER) { m_Header.m_Format=m_Header.m_Format+1; } elseif(nFormat==LVCFMT_RIGHT) { m_Header.m_Format=m_Header.m_Format+2; } else { m_Header.m_Format=m_Header.m_Format+1; } returnCListCtrl::InsertColumn(nCol,lpszColumnHeading,nFormat,nWidth,nSubItem); }

文档评论(0)

1亿VIP精品文档

相关文档