ListCtrl控件着色

最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化。

其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了。

其实说白了,原理很简单,就是ListCtrl在插入一个Item的时候,会发送一个NM_CUSTOMDRAW的消息,我们只要实现这个消息响应函数,并在里面绘制我们的颜色就可以了。

但是响应这个消息在VC6.0下需要自己实现:

1.在头文件中声明函数:afx_msg void OnCustomdrawMyList( NMHDR* pNMHDR, LRESULT* pResult ); 

2.在cpp文件中添加消息映射:ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST, OnCustomdrawMyList)

3.函数的实现:

void CXXX::OnCustomdrawMyList( NMHDR* pNMHDR, LRESULT* pResult )
{
 NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
 
    // Take the default processing unless we set this to something else below.
    *pResult = 0;
 
    // First thing - check the draw stage. If it's the control's prepaint
    // stage, then tell Windows we want messages for every item.
    if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
 {
        *pResult = CDRF_NOTIFYITEMDRAW;
 }
 
 // This is the notification message for an item. We'll request
 // notifications before each subitem's prepaint stage.
 else if ( pLVCD->nmcd.dwDrawStage==CDDS_ITEMPREPAINT )
 {
  COLORREF m_clrText;
  int   nItem = static_cast<int> (pLVCD->nmcd.dwItemSpec);
  
  // 根据文本内容判断使ListCtrl不同颜色现实的条件
  CString str = m_list.GetItemText(nItem ,0);
  if (str == "0")
  {
   m_clrText = RGB(12,26,234);
  }
  else if (str == "1")
  {
   m_clrText = RGB(0,0,0);
  }
  else
  {
   m_clrText = RGB(255, 0, 0);
  }
  pLVCD->clrText = m_clrText;
  *pResult = CDRF_DODEFAULT;
 }
}

 

 

 

 

 

时间: 2024-10-16 03:19:00

ListCtrl控件着色的相关文章

listctrl控件-ListCtrl控件为什么一次只能添加一个文件,而不能同时添加多个?

问题描述 ListCtrl控件为什么一次只能添加一个文件,而不能同时添加多个? 我用C++写的一个MFC基本对话框里引入了一个listctrl控件,但是添加文件的时候一次只能添加一个文件,求大神开导,这是为什么?代码如下:(在初始化函数中)m_control=static_cast(m_player.GetControls()); m_setting=m_player.GetSettings(); m_list=static_cast(m_player.GetCurrentPlaylist())

VC/MFC ListCtrl 控件功能使用汇总(转)

以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 "ListView_"开头的一些宏.如 ListView_InsertColumn -------------------------------------------------------------------------------- 1. CListCtrl 风格      LVS_ICON: 为每个item显示大图标      LVS_SMALLIC

windows编程-怎么用c语言实现mfc的listctrl控件?

问题描述 怎么用c语言实现mfc的listctrl控件? 怎么用c语言实现mfc的listctrl控件? 最好有代码 谢谢 解决方案 hInst = ((LPCREATESTRUCT)lParam) -> hInstance; hMenu = GetMenu(hwnd); InitCommonControls(); hList = CreateWindowEx(NULL, TEXT("SysListView32"), NULL,LVS_REPORT | WS_CHILD | WS

duilib中ListCtrl控件的实现

转载请说明出处,谢谢~~      昨天在编程群里聊天,提到了ListCtrl,然后有网友找我,他需要做一个ListCtrl控件,我看过需求后接下了这个活.今天就把大致的思路和过程记录一下.首先看<任务书>:     -----------------------------------------------------------任务书开始------------------------------------------------------------------- 任务书: 1.效

在ListCtrl控件中设置自定义光标

 ::SetCursor(::LoadCursor   (::AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_BMP_MOUSE))); void   CMyListCtrl::OnItemchanged(NMHDR*   pNMHDR,   LRESULT*   pResult) {                   NM_LISTVIEW*   pNMListView   =   (NM_LISTVIEW*)   pNMHDR;         

大家好,我是新手,提个问题,高手帮帮忙,关于win32 应用程序listctrl控件,没办法插入数据的问题

问题描述 源程序如下:LRESULTCALLBACKTryOut(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam){HWNDhWndList;LVCOLUMNcolumn;LVITEMitem={0};LVITEMvi;switch(message){caseWM_INITDIALOG:hWndList=::GetDlgItem(hDlg,IDC_LIST1);::SendMessage(hWndList,LVM_SETEXTENDEDLISTVIE

c++-MFC Tab控件下的page与page的控件冲突

问题描述 MFC Tab控件下的page与page的控件冲突 我在MFC下做了4个对话框,其中一个是主对话框,内有一个Tab控件,然后剩下的三个对话框作为子对话框,也就是tab控件的三个page. 我在第一个page(子对话框)中添加了一些控件,如listctrl控件,同时关联了变量. 程序运行没有问题. 接着我在其他两个page(子对话框)中添加了相同的控件,同时关联了变量,接下来就是令我不解的地方,程序崩溃了.我什么都没做,只是关联了一下控件变量,不知道为什么程序会崩溃. 在线等,求大神指导

MFC 列表控件CListCtrl加载类似QQ界面的头像与文字

本文主要讲述使用VS2012 MFC的CListCtrl(列表)控件加载类似于QQ界面的图片与文字数据.主要通过CListCtrl::InsertColumn.InsertItem.SetItemText向列表插入数据,CImageList插入BMP图片或ICON图标. 一.创建项目及界面 1.创建项目     创建项目名为"QQList"的基于MFC对话框的应用程序.资源视图中对话框IDD_QQLIST_DIALOG删除"TODE"和按钮,并添加List Cont

MFC父窗口控制子窗口CListCtrl控件刷新的问题

问题描述 MFC父窗口控制子窗口CListCtrl控件刷新的问题 目标:父窗口单击按钮,向子窗口发送一个消息:子窗口的消息处理函数中,调用列表显示函数来刷新列表数据. 我的代码: // 父窗口void CDlg4::OnButtonClick(){ CDlg43 *dlg = new CDlg43(); dlg->Create(IDD_DIALOG_43this); if (NULL == dlg) { AfxMessageBox(""failed""); d