C++ListControl颜色控制

来源:互联网 发布:dw是什么软件 编辑:程序博客网 时间:2024/06/06 02:51

1. 在头文件中加入

afx_msg void OnCustomdrawList ( NMHDR* pNMHDR, LRESULT* pResult );

2.在源文件中BEGIN_MESSAGE_MAP()  END_MESSAGE_MAP()中间加入

ON_NOTIFY (NM_CUSTOMDRAW,IDC_LIST, OnCustomdrawList)  
<pre name="code" class="cpp">NM_CUSTOMDRAW 为消息类型, IDC_LIST为列表框ID, <span style="font-family: Arial, Helvetica, sans-serif;">OnCustomdrawList 是实现函数;</span>

3.实现部分

void CListControlBkColorDlg::OnCustomdrawList (NMHDR* pNMHDR, LRESULT* pResult){NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR ); *pResult = CDRF_DODEFAULT;     if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )      {          *pResult = CDRF_NOTIFYITEMDRAW;      }      else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)      {          // This is the notification message for an item.  We'll request          // notifications before each subitem's prepaint stage.  *pResult = CDRF_NOTIFYSUBITEMDRAW;      }      else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )      {COLORREF crText, crBk;int nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec);DWORD itemData = m_list.GetItemData(nItem);if(itemData==0)crBk = RGB(125,125,125);elsecrBk = RGB(0,0,65);if( (pLVCD->nmcd.dwItemSpec % 3)==0 )crText = RGB(255,0,0);else if( (pLVCD->nmcd.dwItemSpec % 3)==1 )crText = RGB(0,255,0);elsecrText = RGB(0,0,255);pLVCD->clrText = crText;pLVCD->clrTextBk = crBk;// Tell Windows to paint the control itself.          *pResult = CDRF_DODEFAULT;      }}


示例图片:



0 0
原创粉丝点击