`
hcmfys
  • 浏览: 356307 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

clistBoxCtrl

    博客分类:
  • c++
阅读更多
CListCtrl 风格设置:

 DWORD   dwStyle   =   m_ListCtrl.GetExtendedStyle();   
 dwStyle   |=   LVS_EX_FULLROWSELECT;    //选中某行使整行高亮(只适用与report风格的listctrl)   
 dwStyle   |=   LVS_EX_GRIDLINES;     //网格线(只适用与report风格的listctrl)   
 dwStyle   |=   LVS_EX_SUBITEMIMAGES;    // 设置图片
 dwStyle   |=   LVS_EX_ONECLICKACTIVATE;    // 点选一个活动行
 m_ListCtrl.SetExtendedStyle(dwStyle);    //设置扩展风格

CListCtrl 中的item插入图片

LVITEM   lvItem;   
memset(&lvItem,   0,   sizeof(LVITEM));   
 lvItem.iItem = nI;   
lvItem.iSubItem = 2; 
lvItem.mask = LVIF_IMAGE;

lvItem.iImage = 1;    // 不带钩的图片 

 m_ListCtrl.SetItem(&lvItem);

 

CListCtrl改变单个item的颜色

首先必须先重载CListCtrl中的OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)函数,进行重绘,然后设置item颜色。

//*********************************************************************************
//** 函 数 名:OnNMCustomdraw
//** 功能描述:listctrl 控件自绘函数,用来修改控件中的颜色
//** 全局变量:
//** 调用模块:
//** 作    者:chenbo
//** 日    期:2008-10-23
//** 修 改 者:
//** 日    期:
//** 版    本:1.0       
//*********************************************************************************
void CListCtrlEx::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
 *pResult = CDRF_DODEFAULT;
 NMLVCUSTOMDRAW * lplvdr=(NMLVCUSTOMDRAW*)pNMHDR;
 NMCUSTOMDRAW &nmcd = lplvdr->nmcd;
 
 switch(lplvdr->nmcd.dwDrawStage)
 {
 case CDDS_PREPAINT:
  
  *pResult = CDRF_NOTIFYITEMDRAW;
  break;
  
 case CDDS_ITEMPREPAINT :
  {
   COLORREF ItemColor;
   if( MapItemColor.Lookup(nmcd.dwItemSpec, ItemColor))
   {
    lplvdr->clrText = ItemColor;
    *pResult = CDRF_DODEFAULT;
   }
  }
  break; 
 }

}

//*********************************************************************************
//** 函 数 名:SetItemColor
//** 功能描述:设置item的颜色
//** 全局变量:
//** 调用模块:
//** 作    者:chenbo
//** 日    期:2008-10-23
//** 修 改 者:
//** 日    期:
//** 版    本:1.0       
//*********************************************************************************
void CListCtrlEx::SetItemColor(DWORD iItem, COLORREF color)
{
 ASSERT(iItem >= 0);
 MapItemColor.SetAt(iItem, color);
 this->RedrawItems(iItem, iItem);
 UpdateWindow();
}
 

 

ClistCtrl中的多选

BOOL CGeoCheckHelp::PreTranslateMessage(MSG* pMsg)
{    
 if(pMsg->message==WM_LBUTTONDOWN)
 {
  // 该函数的返回值为一个Integer型数(双字节),要判断是否按下特定键,就看返回值,
  // 如果开关键打开,则位0设为1(开关键包括CapsLock, NumLock,ScrollLock);即(0000000000000001)2,
  // 如果某键正处于按下状态,则位15为1;即(1000000000000000)2,如已经抬起,则为0。即(0000000000000001)2,
  // 如果某键正处于按下状态,则位15为1;即(1000000000000000)2,如已经抬起,则为0

  if (!(GetKeyState(VK_CONTROL)&0x8000) && !(GetKeyState(VK_SHIFT)&0x8000) )
  {
   if(IsMuitSelCur())
   {
    LVHITTESTINFO hitTest;
    UINT   uFlags   =    0 ;  

    CPoint point;
    point.SetPoint(pMsg->pt.x,pMsg->pt.y);

    m_ListCtrl.ScreenToClient(&point);
    hitTest.pt = point;
    hitTest.flags = uFlags;
    m_ListCtrl.HitTest(&hitTest);

    int nRow = m_ListCtrl.HitTest(point);
    CString strTem = m_ListCtrl.GetItemText(nRow,2);
    CString strTep = m_ListCtrl.GetItemText(nRow,8);

    LVHITTESTINFO sublvHit;
    sublvHit.pt = point;
    int nColumn = m_ListCtrl.SubItemHitTest(&sublvHit);

    if(sublvHit.iSubItem == 2)
    {
     POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
     if (pos == NULL)
      return TRUE;
     else
     {
      do
      {
       int nItem = m_ListCtrl.GetNextSelectedItem(pos);
       {
        int nCheckID = vec1[nItem];
        CString strCheckID;
        strCheckID.Format(_T("%d"),nCheckID);
        if ( strTem== _T("√") )
        {
         SetTableData(strCheckID,0);
         m_ListCtrl.SetRedraw(false);
         m_ListCtrl.SetItemText(nItem,2,_T("□"));
         m_ListCtrl.SetRedraw(true);

        }else
        {
         SetTableData(strCheckID,-1);
         m_ListCtrl.SetRedraw(false);
         m_ListCtrl.SetItemText(nItem,2,_T("√"));
         m_ListCtrl.SetRedraw(true);
        }
       }

 

 

!时间仓促,此播客以下内容大多为网上整理,特向原作者表示感谢!

--------------------------------------------------------------------------------

1. CListCtrl 样式及设置
 LVS_ICON: 每个item显示大图标
 LVS_SMALLICON: 每个item显示小图标
 LVS_LIST: 显示一列带有小图标的item
 LVS_REPORT: 显示item详细资料

 如windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”

 LONG lStyle;
 lStyle=GetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE); //获取当前窗口style
 lStyle &= ~LVS_TYPEMASK; //清除显示方式位
 lStyle |= LVS_REPORT; //设置style
 SetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE, lStyle); //设置style


--------------------------------------------------------------------------------

2. 扩展样式设置


 DWORD dwStyle = m_ListCtrl.GetExtendedStyle(); //获取当前扩展样式
 dwStyle |= LVS_EX_FULLROWSELECT; //选中某行使整行高亮(report风格时)
 dwStyle |= LVS_EX_GRIDLINES; //网格线(report风格时)
 dwStyle |= LVS_EX_CHECKBOXES; //item前生成checkbox控件
 m_ListCtrl.SetExtendedStyle(dwStyle); //设置扩展风格


--------------------------------------------------------------------------------

3. 数据插入

 m_ListCtrl.InsertColumn(0,"名称",LVCFMT_LEFT,50); //插入列
 m_ListCtrl.InsertColumn(1,"备注",LVCFMT_LEFT,50);
 

 //直接插入:

 int nRow=m_ListCtrl.InsertItem(0, "VC++");        //插入行
 m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0");  //设置数据

 //LVITEM 结构插入:

 LVITEM item={0};
 item.iItem=0;  //行号
 item.mask=LVIF_TEXT; /*LVIF_IMAGE支持图标*/;
 item.cchTextMax=15;//插入字符串长度
 item.pszText="Visual C++ 6.0";

 int nRow=m_ListCtrl.InsertItem(&item);

 m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0");


--------------------------------------------------------------------------------

4. 一直选中Item

 选中style中的 Show selection always,

 或者添加扩展样式 LVS_SHOWSELALWAYS


--------------------------------------------------------------------------------

5. 选中和取消选中Item
 int nIndex = 0;
 //选中
  m_ListCtrl.SetItemState(nIndex,LVIS_SELECTED|

  LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
 //取消选中
  m_ListCtrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);


--------------------------------------------------------------------------------

6. 得到CListCtrl中所有行的checkbox的状态
 CString str;
 for(int i=0; i<m_ListCtrl.GetItemCount(); i++)

 {
   if(m_ListCtrl.GetItemState(i, LVIS_SELECTED)==

    LVIS_SELECTED || m_ListCtrl.GetCheck(i))
   {
     str.Format(_T("第%d行的checkbox为选中状态"), i);
     AfxMessageBox(str);
    }

  }


--------------------------------------------------------------------------------

7. 得到CListCtrl中所有选中行的序号

 //方法一:
  CString str;
  for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
  {
    if(m_ListCtrl.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
    {
      str.Format(_T("选中了第%d行"), i);
      AfxMessageBox(str);
     }
   }

 //方法二:
  POSITION pos=m_ListCtrl.GetFirstSelectedItemPosition();
  if(pos==NULL)
   TRACE0("No items were selected!\n");
  else
  {
   while(pos)
    {
      int nItem=m_ListCtrl.GetNextSelectedItem(pos);
      TRACE1("Item %d was selected!\n", nItem);
      //添加其他操作

     }
   }


--------------------------------------------------------------------------------

8. 得到item的信息
 TCHAR szBuf[1024];
 LVITEM lvi;
 lvi.iItem = nItemIndex;
 lvi.iSubItem = 0;
 lvi.mask = LVIF_TEXT;
 lvi.pszText = szBuf;
 lvi.cchTextMax = 1024;
 m_ListCtrl.GetItem(&lvi);

 关于得到设置item的状态,还可以参考msdn文章
 Q173242: Use Masks to Set/Get Item States in CListCtrl
 http://support.microsoft.com/kb/173242/en-us


--------------------------------------------------------------------------------

9. 得到CListCtrl的所有列的header字符串内容
 LVCOLUMN lvcol;
 char  str[256];
 int   nColNum;
 CString strColumnName[3];//假如有3列

 nColNum = 0;
 lvcol.mask = LVCF_TEXT;
 lvcol.pszText = str;
 lvcol.cchTextMax = 256;
 while(m_list.GetColumn(nColNum, &lvcol))
 { 
   strColumnName[nColNum] = lvcol.pszText;
   nColNum++;
  }


--------------------------------------------------------------------------------

10. 使CListCtrl中一项可见,即滚动滚动条
 m_ListCtrl.EnsureVisible(i, FALSE);


--------------------------------------------------------------------------------

11. 得到CListCtrl列数
 int nHeadNum=m_ListCtrl.GetHeaderCtrl()->GetItemCount();


--------------------------------------------------------------------------------

12. 删除所有列
 方法一:
  while(m_ListCtrl.DeleteColumn(0))
  //因为你删除了第一列后,后面的列会依次向上移动。

 方法二:
  int nColumns = 3; //列数
  for(int i=nColumns-1; i>=0; i--)

   m_ListCtrl.DeleteColumn(i);


--------------------------------------------------------------------------------

13. 得到单击的CListCtrl的行列号
 添加listctrl控件的NM_CLICK消息相应函数
 void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
 {
  //方法一:

  DWORD dwPos=GetMessagePos();
  CPoint point( LOWORD(dwPos), HIWORD(dwPos));

  m_ListCtrl.ScreenToClient(&point);
 

  LVHITTESTINFO lvinfo;
  lvinfo.pt=point;
  lvinfo.flags=LVHT_ABOVE;
 

  int nItem=m_ListCtrl.SubItemHitTest(&lvinfo);
  if(nItem!=-1)
  {
    CString strtemp;
    strtemp.Format("单击的是第%d行第%d列",

    lvinfo.iItem, lvinfo.iSubItem);
    AfxMessageBox(strtemp);
   }

  // 方法二:
  NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
  if(pNMListView->iItem!=-1)
  {

    CString strtemp;
    strtemp.Format("单击的是第%d行第%d列",
    pNMListView->iItem, pNMListView->iSubItem);
    AfxMessageBox(strtemp);
   }

   *pResult = 0;

 }


--------------------------------------------------------------------------------

14. 判断是否点击在CListCtrl的checkbox上
 添加listctrl控件的NM_CLICK消息相应函数
 void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
 {

   DWORD dwPos=GetMessagePos();
   CPoint point(LOWORD(dwPos), HIWORD(dwPos));

   m_ListCtrl.ScreenToClient(&point);
 

   LVHITTESTINFO lvinfo;
   lvinfo.pt=point;
   lvinfo.flags=LVHT_ABOVE;
     
   UINT nFlag;
   int nItem=m_ListCtrl.HitTest(point, &nFlag);
   //判断是否点在checkbox上
   if(nFlag==LVHT_ONITEMSTATEICON)
   {
     AfxMessageBox("点在listctrl的checkbox上");
   } 
   *pResult = 0;
 }


--------------------------------------------------------------------------------

15. 右键点击CListCtrl的item弹出菜单
 添加CListCtrl控件的NM_RCLICK消息相应函数
 void CMyDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
 {
   NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
   if(pNMListView->iItem!=-1)
   {
     DWORD dwPos = GetMessagePos();
     CPoint point( LOWORD(dwPos), HIWORD(dwPos) );

   

     CMenu menu;
     VERIFY( menu.LoadMenu( IDR_MENU1 ) );
     CMenu* popup = menu.GetSubMenu(0);
     ASSERT( popup != NULL );
     popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,

     point.x, point.y, this );

    } 
    *pResult = 0;

 }


--------------------------------------------------------------------------------

16. CListCtrl进行大数据量更新时,避免闪烁
 m_ListCtrl.SetRedraw(FALSE);
 //更新内容
 m_ListCtrl.SetRedraw(TRUE);
 m_ListCtrl.Invalidate();
 m_ListCtrl.UpdateWindow();
 //或者参考

 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.setredraw.asp


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sghgcn/archive/2009/03/05/3958219.aspx
      }
      while(pos);
     }
     return TRUE;
    }
    if (sublvHit.iSubItem == 8)
    {
     POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
     if (pos == NULL)
      return TRUE;
     else
     {
      do
      {
       int nItem = m_ListCtrl.GetNextSelectedItem(pos);
       {
        int nCheckID = vec1[nItem];
        CString strCheckID;
        strCheckID.Format(_T("%d"),nCheckID);
        if ( strTep== _T("√") )
        {
         SetMoreTableData(strCheckID,0);
         m_ListCtrl.SetRedraw(false);
         m_ListCtrl.SetItemText(nItem,8,_T("□"));
         m_ListCtrl.SetRedraw(true);

        }else
        {
         SetMoreTableData(strCheckID,-1);
         m_ListCtrl.SetRedraw(false);
         m_ListCtrl.SetItemText(nItem,8,_T("√"));
         m_ListCtrl.SetRedraw(true);
        }
       }
      }
      while(pos);
     }
     return TRUE;
    }
   }
  }
 }       
 return   CDialog::PreTranslateMessage(pMsg); 
}
 

 

分享到:
评论

相关推荐

    原生js图片圆形排列按钮控制3D旋转切换插件.zip

    原生js图片圆形排列按钮控制3D旋转切换插件.zip

    类似c++数组的python包

    内含二维数组与三维数组,分别为list2nd,list3rd

    原生js颜色随机生成9x9乘法表代码.zip

    原生js颜色随机生成9x9乘法表代码.zip

    原生js实现图片叠加滚动切换代码.zip

    原生js实现图片叠加滚动切换代码.zip

    【Academic tailor】学术小裁缝必备知识点:全局注意力机制(GAM)TensorFlow

    【Academic tailor】学术小裁缝必备知识点:全局注意力机制(GAM) 注意力机制是深度学习中的重要技术,尤其在序列到序列(sequence-to-sequence)任务中广泛应用,例如机器翻译、文本摘要和问答系统等。这一机制由 Bahdanau 等人在其论文《Neural Machine Translation by Jointly Learning to Align and Translate》中首次提出。以下将详细介绍这一机制的背景、核心原理及相关公式。 全局注意力机制(Global Attention Mechanism, GAM)由 《Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions》提出,是一篇针对计算机视觉任务提出的方法。这篇文章聚焦于增强深度神经网络中通道和空间维度之间的交互,以提高分类任务的性能。与最早由 Bahdanau 等人提出的用于序列到序列任务的注意力机制 不同,这篇文章的重点是针对图像分类任务,并未专注于序

    基于SpringBoot的“篮球论坛系统”的设计与实现(源码+数据库+文档+PPT).zip

    本项目在开发和设计过程中涉及到原理和技术有: B/S、java技术和MySQL数据库等;此文将按以下章节进行开发设计; 第一章绪论;剖析项目背景,说明研究的内容。 第二章开发技术;系统主要使用了java技术, b/s模式和myspl数据库,并对此做了介绍。 第三章系统分析;包罗了系统总体结构、对系统的性能、功能、流程图进行了分析。 第四章系统设计;对软件功能模块和数据库进行详细设计。 第五章系统总体设计;对系统管理员和用户的功能进行描述, 第六章对系统进行测试, 第七章总结心得;在论文最后结束章节总结了开发这个系统和撰写论文时候自己的总结、感想,包括致谢。

    毕业设计&课设_iOS 商城项目,含购物与商家管理功能,用 Sqlite,有账号示例,适合 iOS 开发练习.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    镗夹具总工艺图.dwg

    镗夹具总工艺图

    原生js树叶数字时钟代码.rar

    原生js树叶数字时钟代码.rar

    近代非线性回归分析-韦博成1989

    近代非线性回归分析-韦博成1989

    Rust语言中冒泡排序算法的高效实现与优化

    内容概要:本文详细介绍了用 Rust 语言实现冒泡排序算法的具体步骤,以及通过设置标志位来优化算法性能的方法。示例代码包括了函数定义、内外层循环逻辑、标志位的应用,并在主函数中展示了如何调用 bubble_sort 函数并显示排序前后的数组。 适合人群:具有基本 Rust 编程基础的学习者和开发者。 使用场景及目标:适用于想要深入了解 Rust 中冒泡排序实现方式及其优化技巧的技术人员。通过本篇文章,能够掌握 Rust 基本语法以及算法优化的基本思想。 阅读建议:除了仔细阅读和理解每一部分的内容外,还可以尝试修改代码,改变数据集大小,进一步探索冒泡排序的时间复杂度和优化效果。此外,在实际应用时也可以考虑引入并发或其他高级特性以提升性能。

    培训课件 -安全隐患分类与排查治理.pptx

    培训课件 -安全隐患分类与排查治理.pptx

    1-中国各地级市的海拔标准差-社科数据.zip

    中国各地级市的海拔标准差数据集提供了298个地级市的海拔变异性信息。海拔标准差是衡量某地区海拔高度分布离散程度的统计指标,它通过计算各测量点海拔与平均海拔之间的差异来得出。这一数据对于评估地形起伏对网络基础设施建设的影响尤为重要,因为地形的起伏度不仅会增加建设成本,还会影响信号质量。此外,由于地形起伏度是自然地理变量,它与经济社会因素关联性较小,因此被用作“宽带中国”试点政策的工具变量,以研究网络基础设施建设对经济的影响。数据集中包含了行政区划代码、地区、所属省份、所属地域、长江经济带、经度、纬度以及海拔标准差等关键指标。这些数据来源于地理空间数据云,并以Excel和dta格式提供,方便研究者进行进一步的分析和研究。

    YOLO算法的原理与实现.pdf

    YOLO算法的原理与实现

    机器学习用于视网膜病变预测:使用 XGBoost 揭示年龄和HbA1c 的重要性 -论文

    视网膜病变是糖尿病和高血压的主要微血管并发症。如果不及时治疗,可能会导致失明。据估计,印度三分之一的成年人患有糖尿病或高血压,他们未来患视网膜病变的风险很高。我们研究的目的是检查糖化血红蛋白 (HbA1c)、血压 (BP) 读数和脂质水平与视网膜病变的相关性。我们的主要假设是,血糖控制不佳(表现为高 HbA1c 水平、高血压和异常脂质水平)会导致视网膜病变风险增加。我们使用眼底照相机筛查了 119 名印度患者的视网膜病变,并获取了他们最近的血压、HbA1c 和血脂谱值。然后,我们应用 XGBoost 机器学习算法根据他们的实验室值预测是否存在视网膜病变。我们能够根据这些关键生物标志物高精度地预测视网膜病变。此外,使用 Shapely Additive Explanations (SHAP),我们确定了对模型最重要的两个特征,即年龄和 HbA1c。这表明血糖控制不佳的老年患者更有可能出现视网膜病变。因此,这些高风险人群可以成为早期筛查和干预计划的目标,以防止视网膜病变发展为失明。

    RL Base强化学习:信赖域策略优化(TRPO)算法TensorFlow实现

    在强化学习(RL)领域,如何稳定地优化策略是一个核心挑战。2015 年,由 John Schulman 等人提出的信赖域策略优化(Trust Region Policy Optimization, TRPO)算法为这一问题提供了优雅的解决方案。TRPO 通过限制策略更新的幅度,避免了策略更新过大导致的不稳定问题,是强化学习中经典的策略优化方法之一。

    Spring 应用编译为原生可执行文件.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    1-中国各地区普通小学毕业生数(1999-2020年)-社科数据.zip

    这组数据涵盖了1999至2020年间中国各地区普通小学毕业生的数量。它为我们提供了一个深入了解中国教育领域中普通小学阶段教育水平和教育资源分配情况的窗口。通过分析这些数据,可以为制定科学合理的教育政策提供依据,同时,通过比较不同城市的普通小学毕业生数,也能为城市规划和劳动力市场调查提供参考。数据来源于中国区域统计年鉴和中国各省市统计年鉴,包含了8472个样本,以面板数据的形式呈现。这些数据对于掌握中国教育态势具有重要的参考价值。

    原生js制作拖拽排列排序代码.zip

    原生js制作拖拽排列排序代码.zip

    PixPin截图工具,非常好用的一款截图工具

    PixPin截图工具,非常好用的一款截图工具

Global site tag (gtag.js) - Google Analytics