知识点:
CListCtrl报表格式
CListCtrl报表格式添加列
CListCtrl报表格式添加行
CListCtrl报表格式设置单元格
一、CListCtrl报表格式
类名:SysListView32
属性
view:report;
二、CListCtrl报表格式添加列
int InsertColumn(intnCol,LPCTSTR lpszColumnHeading,int nFormat=LVCFMT_LEFT,in nWidth=-1,int nSubItem=-1);
BOOL SetColumnWidth( int nCol, int cx );
三、CListCtrl报表格式添加行
BOOL InsertItem( int nItem, LPCTSTR lpszItem, int nImage );
四、CListCtrl报表格式设置单元格文本
CListCtrl::SetItemText //GetItemText
BOOL SetItemText( int nItem/行/, int nSubItem/列/, LPTSTR lpszText );
五、SHGetFileInfo 获取文件类型
SHGFI_TYPENAME
SHGFI_DISPLAYNAME
六、设置扩展样式
CTabCtrl::SetExtendedStyle
plst_ctl->SetExtendedStyle(LVS_EX_FULLROWSELECT);
——————————
这个是窗口设计图,在属性框里将View换为Report
设计好的页面
相关代码
// Dialog_ListCtrl_Test.cpp : 实现文件
//
#include "stdafx.h"
#include "MyWindow.h"
#include "Dialog_ListCtrl_Test.h"
// CDialog_ListCtrl_Test 对话框
IMPLEMENT_DYNAMIC(CDialog_ListCtrl_Test, CDialog)
CDialog_ListCtrl_Test::CDialog_ListCtrl_Test(CWnd* pParent /*=NULL*/)
: CDialog(CDialog_ListCtrl_Test::IDD, pParent)
, FileDir(_T(""))
{
}
CDialog_ListCtrl_Test::~CDialog_ListCtrl_Test()
{
}
void CDialog_ListCtrl_Test::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CDialog_ListCtrl_Test, CDialog)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &CDialog_ListCtrl_Test::OnLvnItemchangedList1)
ON_BN_CLICKED(IDC_BUTTON1, &CDialog_ListCtrl_Test::OnBnClickedButton1)
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CDialog_ListCtrl_Test::OnNMDblclkList1)
END_MESSAGE_MAP()
// CDialog_ListCtrl_Test 消息处理程序
int CDialog_ListCtrl_Test::OnInitDialog(void)
{
//添加项目
CListCtrl* plst_ctl=(CListCtrl*)GetDlgItem(IDC_LIST1);
//添加图标
m_imagelist_b.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);
m_imagelist_s.Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 0);
plst_ctl->SetImageList(&m_imagelist_b, LVSIL_NORMAL); //大图标
plst_ctl->SetImageList(&m_imagelist_s, LVSIL_SMALL); //小图标
plst_ctl->SetExtendedStyle(LVS_EX_FULLROWSELECT);
/*plst_ctl->InsertItem(0,L"0000",0);
plst_ctl->InsertItem(1,L"1111",0);
plst_ctl->InsertItem(2,L"2222");
plst_ctl->InsertItem(3,L"aaaaa");
plst_ctl->SetItemText(3,0,L"33333");*/
//添加列 文件名 文件类型
plst_ctl->InsertColumn(0, L"文件名", 0, 55);
plst_ctl->InsertColumn(1, L"文件类型", 0, 88);
plst_ctl->SetColumnWidth(0, 150);
plst_ctl->SetColumnWidth(1, 100);
CFileFind findfile;
int nfound = findfile.FindFile(L"C:\\windows\\//*.*");
int i = 0;
while(nfound) //遍历文件
{
nfound = findfile.FindNextFile();
if (findfile.IsDirectory())
{
continue;
}
SHFILEINFO finfo;
//获取文件信息,主要图标icon
SHGetFileInfo(findfile.GetFilePath(),0,&finfo,sizeof(finfo),SHGFI_ICON|SHGFI_TYPENAME);
//添加文件项目和图标
m_imagelist_b.Add(finfo.hIcon);
m_imagelist_s.Add(finfo.hIcon);
plst_ctl->InsertItem(i, findfile.GetFileName(), m_imagelist_b.Add(finfo.hIcon));
/*plst_ctl->SetItemText(0, 1, L"文件类型");
plst_ctl->SetItemText(1, 1, L"文件类型");*/
plst_ctl->SetItemText(i++, 1, finfo.szTypeName);
}
FileDir = findfile.GetRoot(); //获取文件目录路径
findfile.Close();//释放资源
return 0;
}
void CDialog_ListCtrl_Test::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
}
void CDialog_ListCtrl_Test::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
ShellExecuteW(0, L"open", L"C:\\1.txt", NULL,NULL, SW_SHOWNORMAL);
}
void CDialog_ListCtrl_Test::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = (LPNMITEMACTIVATE)(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
//获取文件目录路径及文件
CListCtrl* plst_ctl = (CListCtrl*)GetDlgItem(IDC_LIST1);
//获取ListCtrl选中项的位置
POSITION pos = plst_ctl->GetFirstSelectedItemPosition();
if (pos)
{
int item_index = plst_ctl->GetNextSelectedItem(pos);
//获取选中图标的文件名
CString filename = plst_ctl->GetItemText(item_index, 0);
filename = FileDir + filename;
TRACE("%ws \n", filename);
ShellExecuteW(0, NULL, filename, NULL, NULL, SW_SHOWNORMAL);
}
*pResult = 0;
}