当前位置: 代码迷 >> 综合 >> MFC CListCtrl 基本操作(一)
  详细解决方案

MFC CListCtrl 基本操作(一)

热度:44   发布时间:2024-02-19 16:07:03.0

双击单元格,获得行列索引

void classname::OnNMDblclkListIn(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);// TODO: 在此添加控件通知处理程序代码*pResult = 0;// 获得行、列索引int nItem    = pNMItemActivate->iItem;int nSubItem = pNMItemActivate->iSubItem;POSITION pos = m_listIn.GetFirstSelectedItemPosition();while (pos)// 当点击位置是在列表内时,执行循环体// 也可以用 if 判断{
    // Add your code...}
}

风格样式

几个常用的风格

m_list.SetExtendedStyle(m_list.GetExtendedStyle()| LVS_EX_FULLROWSELECT   /* */| LVS_EX_GRIDLINES       /* 网格 */| LVS_EX_DOUBLEBUFFER);  /* 虚拟列表双缓存 */

虚拟列表

  • 用 OnTimer、 .Invalidate()、 .UpdateWindow() 控制数据刷新频率
  • 用 LVS_EX_DOUBLEBUFFER 风格样式控制闪烁
  • 用 memDC 也可以控制闪烁
  • 用 m_list.SetItemCount() 设置显示行数,而不是 InsertItem
// 显示列表信息
void CDlgPageInput::OnLvnGetdispinfoListIn(NMHDR *pNMHDR, LRESULT *pResult)
{
    NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);// TODO: 在此添加控件通知处理程序代码LV_ITEM	 *pDispItem = &(pDispInfo)->item;*pResult = 0;if ((pDispItem->mask & LVIF_TEXT)){
    switch (pDispItem->iSubItem){
    case 0:// 示例_stprintf_s(pDispItem->pszText, 128, _T(""), ....); break;break;case 1:// 示例lstrcpy(pDispItem->pszText, ....);					break;//......default:break;}}
}