C++/MFC-List Control(图标、报表、列表)风格

              Listbox Control:列表控件                                            List Control:列表视图控件

C++/MFC-List Control(图标、报表、列表)风格_第1张图片

一、CListCtrl常用属性

View:视图方式;1.大(标准)图标2.小图标3.列表4.报表
Sort:排序;
No Scroll:没有进度条;

二、CListCtrl常用成员函数

int InsertItem( intnItem, LPCTSTRlpszItem ); //插入项目
int InsertItem( intnItem, LPCTSTRlpszItem, intnImage );//插入一个项目,带图标序号的
BOOL DeleteItem( int nItem );
int GetItemCount( ); //获取项目数
BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText );//设置项目文本
int GetItemText( int nItem, int nSubItem, LPTSTR lpszText, int nLen ) const;
CString GetItemText( intnItem, intnSubItem ) const;
CImageList* SetImageList( CImageList* pImageList, int nImageList );

三、图标风格

3.1CImageList

CImageList*SetImageList(CImageList*pImageList,int nImageList);

只能是16*16 或 32*32
BOOL Create(intcx,intcy,UINT nFlags,int nInitial,int nGrow);
CImageList::Create(32,32,ILC_COLOR32|ILC_MASK,2,1);//创建图标列表,此处32*32
//ILC_COLOR32指定颜色位数
//ILC_MASK是否启用透明

3.2添加图标资源至ImageList对象

CWinApp::LoadIcon
HICON LoadIcon(LPCTSTR lpszResourceName)const;
HICON LoadIcon(UINT nIDResource)const;
imagelistb.Add(AfxGetApp()->LoadIcon(IDR_MAINFRAME));//添加资源图标

3.3举例

xxxDlg.h中CImageList m_imagelist_b;

CListCtrl* plst_ctl = (CListCtrl*)GetDlgItem(IDC_LIST2);
//添加图标
m_imagelist_b.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//创建
m_imagelist_b.Add(AfxGetApp()->LoadIcon(IDR_MAINFRAME));//添加

plst_ctl->SetImageList(&m_imagelist_b, LVSIL_NORMAL);//设置

3.4提取文件图标

WINSHELLAPIDWORD WINAPI SHGetFileInfo(
    LPCTSTR pszPath, //文件路径
    DWORD dwFileAttributes, //文件属性 忽略
    SHFILEINFO FAR *psfi,//返回文件信息
    UINT cbFileInfo, //SHFILEINFO 结构大小
    UINT uFlags //文件标志 SHGFI_ICON
);
示例代码:
CListCtrl* plst_ctl = (CListCtrl*)GetDlgItem(IDC_LIST2);
//添加图标
m_imagelist_b.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//大图标
m_imagelist_s.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//小图标
CFileFind findfile;
int nfound = findfile.FindFile(L"C:\\Windows\\//*.*");//C:\\Windows\\为Windows目录下的
int i = 0;
while (nfound)
{
	nfound = findfile.FindNextFileW();
	if (findfile.IsDirectory())
	{
		continue;
	}
	SHFILEINFO finfo;
	//获取文件信息,主要是图标icon
	SHGetFileInfo(findfile.GetFilePath(), 0, &finfo, sizeof(finfo), SHGFI_ICON);
	m_imagelist_s.Add(finfo.hIcon);
	plst_ctl->InsertItem(i++, findfile.GetFileName(), m_imagelist_b.Add(finfo.hIcon));
		
}
plst_ctl->SetImageList(&m_imagelist_b, LVSIL_NORMAL);//大图标
plst_ctl->SetImageList(&m_imagelist_s, LVSIL_SMALL);//小图标     findfile.Close();//释放

3.5双击打开文件

CListCtrl::GetFirstSelectedItemPosition
POSITION GetFirstSelectedItemPosition( ) const;
//返回选中项目的位置


CListCtrl::GetNextSelectedItem
int GetNextSelectedItem( POSITION& pos ) const;
//返回选中项目的索引值


//ShellExecute函数
  HINSTANCE ShellExecute(
    HWND hwnd, //指定父窗口句柄,此参数可为NULL
    LPCTSTR lpOperation, //操作方式
    LPCTSTR lpFile, //要打开的文件名,一般是全路径的如 c:\\1.txt
    LPCTSTR lpParameters, //要带的参数
    LPCTSTR lpDirectory,//默认运行目录
    INT nShowCmd //显示方式
); 

为控件添加一个双击事件NM_Dblclk.

//获取文件目录路径及文件
CListCtrl* plst_ctl = (CListCtrl*)GetDlgItem(IDC_LIST2);
//获取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);//MFC控制台输出函数。
	ShellExecute(0, NULL, filename, NULL, NULL, SW_SHOWNORMAL);//或者 ShellExecute(0, L"open", filename, NULL, NULL, SW_SHOW); 这两个函数一样
}
.h文件中定义一个CString类型的FileDir。
在3.4代码的末尾添加
FileDir = findfile.GetRoot();//获得文件目录路径

四、报表风格

VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)
VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)


plst_ctl->SetExtendedStyle(LVS_EX_FULLROWSELECT);即可全行选中。




你可能感兴趣的:(C++/MFC-控件)