1、在VC++ 6.0中新建基于对话框的MFC应用程序ListCtrl;

  2、在主对话框上添加一个List Control至合适的位置及大小;

  

  3、在对话框OnInitDialog中初始化ListCtrl,代码如下:

    // 设置ListCtrl的风格及扩展风格
LONG lStyle;
lStyle = GetWindowLong(m_ctlListCtrl.m_hWnd, GWL_STYLE);
lStyle &= ~LVS_TYPEMASK;
lStyle |= LVS_REPORT;
SetWindowLong(m_ctlListCtrl.m_hWnd, GWL_STYLE, lStyle); DWORD dwStyle = m_ctlListCtrl.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT; //选中某行使整行高亮(LVS_REPORT)
dwStyle |= LVS_EX_GRIDLINES; //网格线(LVS_REPORT)
dwStyle |= LVS_EX_CHECKBOXES; //CheckBox
m_ctlListCtrl.SetExtendedStyle(dwStyle); // 向ListCtrl插入数据
m_ctlListCtrl.InsertColumn( , _T("No."), LVCFMT_LEFT, );
m_ctlListCtrl.InsertColumn( , _T("Name"), LVCFMT_LEFT, );
m_ctlListCtrl.InsertColumn( , _T("Address"), LVCFMT_LEFT, );
m_ctlListCtrl.InsertColumn( , _T("Score"), LVCFMT_LEFT, );
int nRowIndex = ;
m_ctlListCtrl.InsertItem(nRowIndex, _T(""));
m_ctlListCtrl.SetItemText(nRowIndex, , _T("Michael Jordan"));
m_ctlListCtrl.SetItemText(nRowIndex, , _T("Brooklyn,New York "));
m_ctlListCtrl.SetItemText(nRowIndex, , _T(""));
nRowIndex++;
m_ctlListCtrl.InsertItem(nRowIndex, _T(""));
m_ctlListCtrl.SetItemText(nRowIndex, , _T("Lebron James"));
m_ctlListCtrl.SetItemText(nRowIndex, , _T("Akron,Ohio"));
m_ctlListCtrl.SetItemText(nRowIndex, , _T(""));
nRowIndex++;
m_ctlListCtrl.InsertItem(nRowIndex, _T(""));
m_ctlListCtrl.SetItemText(nRowIndex, , _T("Kobe Bryant"));
m_ctlListCtrl.SetItemText(nRowIndex, , _T("Philadelphia,Pennsylvania"));
m_ctlListCtrl.SetItemText(nRowIndex, , _T(""));
nRowIndex++;
m_ctlListCtrl.InsertItem(nRowIndex, _T(""));
m_ctlListCtrl.SetItemText(nRowIndex, , _T("James Harden"));
m_ctlListCtrl.SetItemText(nRowIndex, , _T("Los Angeles,California"));
m_ctlListCtrl.SetItemText(nRowIndex, , _T(""));
nRowIndex++;
m_ctlListCtrl.InsertItem(nRowIndex, _T(""));
m_ctlListCtrl.SetItemText(nRowIndex, , _T("Russell Westbrook"));
m_ctlListCtrl.SetItemText(nRowIndex, , _T("Long Beach,CA"));
m_ctlListCtrl.SetItemText(nRowIndex, , _T(""));

  4、添加消息响应

  // Generated message map functions
  //{{AFX_MSG(CListCtrlDlg)
  virtual BOOL OnInitDialog();
  afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
  afx_msg void OnPaint();
  afx_msg HCURSOR OnQueryDragIcon();
  afx_msg void OnClickListDemo(NMHDR* pNMHDR, LRESULT* pResult);
  afx_msg void OnCustomDrawListDemo(NMHDR* pNMHDR, LRESULT* pResult);
  afx_msg void OnItemChangedListDemo(NMHDR* pNMHDR, LRESULT* pResult);
  //}}AFX_MSG
  DECLARE_MESSAGE_MAP()


  BEGIN_MESSAGE_MAP(CListCtrlDlg, CDialog)
    //{{AFX_MSG_MAP(CListCtrlDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_NOTIFY(NM_CLICK, IDC_LIST_DEMO, OnClickListDemo)
    ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST_DEMO, OnCustomDrawListDemo)
    ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_DEMO, OnItemChangedListDemo)
    //}}AFX_MSG_MAP
  END_MESSAGE_MAP()


void CListCtrlDlg::OnClickListDemo(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -)
{
int i = pNMListView->iItem;
int nCheckState = ;
if( m_ctlListCtrl.GetItemState(i, m_ctlListCtrl.GetCheck(i)))
{
nCheckState = ;
}
CString strtemp;
strtemp.Format(_T("Row = %d, Column = %d\nCheckState = %d"), pNMListView->iItem, pNMListView->iSubItem, nCheckState);
AfxMessageBox(strtemp);
}
*pResult = ;
} void CListCtrlDlg::OnCustomDrawListDemo( NMHDR* pNMHDR, LRESULT* pResult )
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
*pResult = ; if(CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if(CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
{
//奇数行
if(pLVCD->nmcd.dwItemSpec % )
pLVCD->clrTextBk = RGB(, , );
//偶数行
else
pLVCD->clrTextBk = RGB(, , );
//继续
*pResult = CDRF_DODEFAULT;
}
} void CListCtrlDlg::OnItemChangedListDemo(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CString sTemp; if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED &&
(pNMListView->uNewState & LVIS_FOCUSED) == )
{
sTemp.Format(_T("%d losted focus"), pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_FOCUSED) == &&
(pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)
{
sTemp.Format(_T("%d got focus"), pNMListView->iItem);
} if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&
(pNMListView->uNewState & LVIS_SELECTED) == )
{
sTemp.Format(_T("%d losted selected"), pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_SELECTED) == &&
(pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)
{
sTemp.Format(_T("%d got selected"), pNMListView->iItem);
}
if (!sTemp.IsEmpty())
{
AfxMessageBox(sTemp);
} *pResult = ;
}

  BOOL CListCtrlDlg::PreTranslateMessage(MSG* pMsg)
  {
    // Ctrl + A 全选
    if( (pMsg->hwnd == GetDlgItem(IDC_LIST_DEMO)->GetSafeHwnd()))
    {
      if(pMsg->message == WM_KEYDOWN)
      {
        switch (pMsg->wParam)
        {
        case 'A':
          if (::GetKeyState(VK_CONTROL) < 0)
          {
            for (int i=0;i < m_ctlListCtrl.GetItemCount();i++)
            {
              m_ctlListCtrl.SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
            }
          }
          return TRUE;
        }
      }
    }
    return CDialog::PreTranslateMessage(pMsg);
  }

 

  5、编译运行

  

  参考:http://www.cppblog.com/finehai/archive/2009/09/17/96574.html

VC++ ListCtrl Report使用的更多相关文章

  1. [VC]listctrl的基本用法

    1   添加listctrl的头 m_list.setextendedstyle(LVS_EX_FULLROWSELECT||LVS_EX_GRIdLINES); m_list.insertcolum ...

  2. 第八篇:SOUI中控件事件的响应

    SOUI中提供了大部分常用的win32标准控件的实现,如pushbutton, checkbox, radiobox, edit, richedit, listbox, combobox, treec ...

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

    以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...

  4. VC++ 中ListCtrl经验总结

    先注明一下,这里,我们用m_listctrl来表示一个CListCtrl的类对象,然后这里我们的ListCtrl都是report形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟report是大众话 ...

  5. vc mfc listctrl使用虚拟列表 虚拟列表用法

    note 虚拟列表可有效加载大量数据 需要处理listctrl的 LVN_GETDISPINFO 消息 使用虚拟列表 不能 使用 insert的方法插入数据,而是告诉listctrl 当前要显示多少行 ...

  6. Vc++ 控件用法总结之List Control

    1.新建对话框MFC,在对话框上放一个ListCtrl ID:IDC_PATH View:Report 2.为ListCtrl添加变量 右击->添加变量m_wndPath 3.找到OnInitD ...

  7. VC/MFC 编程技巧大总结

    1 toolbar默认位图左上角那个点的颜色是透明色,不喜欢的话可以自己改. 2 VC++中 WM_QUERYENDSESSION WM_ENDSESSION 为系统关机消息. 3 Java学习书推荐 ...

  8. VC的CListCtrl控件

    1. CListCtrl 样式及设置 2. 扩展样式设置 3. 数据插入 4. 一直选中Item 5. 选中和取消选中Item 6. 得到CListCtrl中所有行的checkbox的状态 7. 得到 ...

  9. (转)使用Custom Draw实现ListCtrl的重绘

    使用Custom Draw实现ListCtrl的重绘   common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里 ...

随机推荐

  1. javascript 自定义动画函数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  2. [Linux]--解决虚拟机中安装ubuntu不能自适应的问题

    这几天换了新的电脑,但是装上ubuntu mate以后就一直不能自适应窗口大小改变分辨率,奈何我是个强迫症,再加上也不想老师带着自己的笔记本跑动跑西的(主要是太重了...),于是今天花了一下午的时间找 ...

  3. 推荐10款最常用的Android开发工具

    我们使用各种语言进行开发时,总是会用到各种各样的开发工具.有些开发工具是开发人员的必备品,有些则是为了提高开发效率而用.Android开发同样也会用到多种开发工具,供开发人员设计.创建.测试和发布程序 ...

  4. JAVA中的字节流与字符流

    字节流与字符流的区别? 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用 ...

  5. mosquitto配置文件详解

    安装完成之后,所有配置文件会被放置于/etc/mosquitto/目录下,其中最重要的就是Mosquitto的配置文件,即mosquitto.conf,以下是详细的配置参数说明. # Config f ...

  6. struts2 转发、重定向概述

    转发等参数传递的注解方式: @Action(value = "operatorRoleAction", results = { @Result(name = "view& ...

  7. unity5, animation event

    一,给导入的fbx动画添加animation event: 如下图,在双击状态机中的idle状态,打开右面的面板,点开Events项会出现一个时间轴,点击下方播放器的播放按钮或者拖动播放器时间轴上的红 ...

  8. 使用jvisualvm进行远程监控

    1. 描述 jvisualvm是JDK自带的监控工具,位于JDK bin目录下面. 默认jvisualvm不能监控远程的JVM进程,需要进行一些配置. 2. 单独在应用上配置JVM启动参数 在Java ...

  9. THREADSPOOL

    STPStartInfo stp = new STPStartInfo();//线程详细配置参数 stp.CallToPostExecute = CallToPostExecute.Always;// ...

  10. cocos2d-x与ISO内存管理(转)

    一,IOS与图片内存 在IOS上,图片会被自动缩放到2的N次方大小.比如一张1024*1025的图片,占用的内存与一张1024*2048的图片是一致的.图片占用内存大小的计算的公式是:长*宽*4.这样 ...