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里 ...
随机推荐
- INV*更新物料信息
物料 PROCEDURE update_item(p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_false, x_return_status OUT NO ...
- 18-spring学习-AOP深入操作
范例:定义一个参数拦截 package com.Spring.aop; import org.springframework.stereotype.Component; @Component publ ...
- ubuntu 设置计划任务
非常简便: crontab -e 以下是我的执行过程,输入命令后,会让我选择一个编辑器,我选的是2,因为后边写着easiest,最简单的. liuyx@myubuntu:/$ crontab -e n ...
- Loadrunner中影响"响应时间"的设置
1.Runtime setting的设置 *Think time 这个就不多说了,如果忽略则"响应时间"会变短,但同时对服务器的压力增大,从而间接影响响应时间 在anlaysis里 ...
- PHP-Yii执行流程分析(源码)
转自:http://www.cnblogs.com/zhanghaoyong/articles/2659846.html 一 目录文件 |-framework 框架核心库 |--base ...
- 视频播放器控制原理:ffmpeg之ffplay播放器源代码分析
版权声明:本文由张坤原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/535574001486630869 来源:腾云阁 ht ...
- C# 中运行exe程序
private int runProcess(string fileName, string appParam) { int returnValue = -1; try { Process myPro ...
- assert 函数
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> void assert( i ...
- Python sql注入 过滤字符串的非法字符
#coding:utf8 #在开发过程中,要对前端传过来的数据进行验证,防止sql注入攻击,其中的一个方案就是过滤用户传过来的非法的字符 def sql_filter(sql, max_length= ...
- mybatis中sql语句传入多个参数方法
1 使用map <select id="selectRole" parameterType="map" resultType="RoleMap& ...