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

来源:互联网 发布:国外免费音乐软件 编辑:程序博客网 时间:2024/05/17 02:13

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


一、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;//获取文件信息,主要是图标iconSHGetFileInfo(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);即可全行选中。




阅读全文
0 0
原创粉丝点击