VC++ ListCtrl Report使用
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使用的更多相关文章
- [VC]listctrl的基本用法
1 添加listctrl的头 m_list.setextendedstyle(LVS_EX_FULLROWSELECT||LVS_EX_GRIdLINES); m_list.insertcolum ...
- 第八篇:SOUI中控件事件的响应
SOUI中提供了大部分常用的win32标准控件的实现,如pushbutton, checkbox, radiobox, edit, richedit, listbox, combobox, treec ...
- VC/MFC ListCtrl 控件功能使用汇总(转)
以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...
- VC++ 中ListCtrl经验总结
先注明一下,这里,我们用m_listctrl来表示一个CListCtrl的类对象,然后这里我们的ListCtrl都是report形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟report是大众话 ...
- vc mfc listctrl使用虚拟列表 虚拟列表用法
note 虚拟列表可有效加载大量数据 需要处理listctrl的 LVN_GETDISPINFO 消息 使用虚拟列表 不能 使用 insert的方法插入数据,而是告诉listctrl 当前要显示多少行 ...
- Vc++ 控件用法总结之List Control
1.新建对话框MFC,在对话框上放一个ListCtrl ID:IDC_PATH View:Report 2.为ListCtrl添加变量 右击->添加变量m_wndPath 3.找到OnInitD ...
- VC/MFC 编程技巧大总结
1 toolbar默认位图左上角那个点的颜色是透明色,不喜欢的话可以自己改. 2 VC++中 WM_QUERYENDSESSION WM_ENDSESSION 为系统关机消息. 3 Java学习书推荐 ...
- VC的CListCtrl控件
1. CListCtrl 样式及设置 2. 扩展样式设置 3. 数据插入 4. 一直选中Item 5. 选中和取消选中Item 6. 得到CListCtrl中所有行的checkbox的状态 7. 得到 ...
- (转)使用Custom Draw实现ListCtrl的重绘
使用Custom Draw实现ListCtrl的重绘 common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里 ...
随机推荐
- 5分钟教你配置命令行界面的163邮箱client
网易163免费邮箱相关server信息: mutt 是命令行下的邮件client,它仅是管理邮件的组织编辑,邮件的发送和接收须要调用相应的程序. 这里用的各自是getmail 和 msmtp. 过程例 ...
- Ubuntu桌面操作快捷键
Ubuntu操作基本快捷键 * 打开主菜单 = Alt + F1 * 运行 = Alt + F2 * 打开终端 = Alt+F2 然后输入gnome-terminal回车 * 显示桌面 = Ctrl ...
- LaTex 常见错误及解决办法
出现错误: Multirow 要用库的 导入\usepackage{multirow} ,,即可
- 【LeetCode】73. Set Matrix Zeroes (2 solutions)
Set Matrix Zeroes Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do i ...
- 真正的PHP多线程(绝非fork或者用http再开进程)
转载:http://blog.csdn.net/leinchu/article/details/8012640 我写了一个扩展打算放到pecl,但是,进过交流发现有人已经做了两个php的多线程扩展 1 ...
- Android成长之路-手势识别的实现
手势识别系统: 先把手势库放到项目中:(创建手势库见下一篇博客) 在res文件夹下新建一个名为raw的文件夹,然后把手势库放进去 然后开始项目的创建: strings.xml: <?xml ...
- 迅为4412开发板Linux驱动教程——总线_设备_驱动注冊流程具体解释
视频下载地址: 驱动注冊:http://pan.baidu.com/s/1i34HcDB 设备注冊:http://pan.baidu.com/s/1kTlGkcR 总线_设备_驱动注冊流程具体解释 • ...
- mac go环境报警告
go get -u github.com/beego/bee 报警告: # github.com/beego/beeld: warning: text-based stub file /System/ ...
- jQuery事件:bind、delegate、on的区别
最近在AngularJS的开发中,遇到一个神奇的事情:我们用到livebox来预览评论列表中的图片, 然而评论列表是由Angular Resource动态载入的.不可思议的是,点击这些动态载入的图片仍 ...
- 二级指针 (C语言)
二级指针又叫双指针.C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针.C++中可以使用引用类型来实现. 下面讲解C中的二级指针的使用方法. 例如我们使用指针来交换两个整型变量的值 ...