怎样使CListCtrl在初始时显示一个图标?
ClistCtrl的类型是LVS_ICON,怎样使它在程序运行初始时
显示一个图标?

解决方案 »

  1.   

    CImageList cil1;
        Cil1.Create(32,32,TRUE,2,2);
        Cil1.Add(pApp->LoadIcon(IDI_DAO1));
     
        
        //设置图象列表
        m_list.SetImageList(&Cil1,LVSIL_NORMAL); 
        m_list.InsertItem(0,"aa",0);
      

  2.   

    LVS_ICON 用来确定大图标的显示方式;LVS_LIST 用来确定列表方式显示;LVS_NOCOLUMNHEADER 用来确定在详细资料方式时不显示列表头;LVS_NOLABELWRAP 用来确定以单行方式显示图标的文本项;LVS_NOSCROLL 用来屏蔽滚动条;LVS_NOSORTHEADER 用来确定列表头不能用作按钮功能;LVS_OWNERDRAWFIXED 在详细列表方式时允许自绘窗口;LVS_REPORT 用来确定以详细资料即报告方式显示;LVS_SHAREIMAGELISTS用来确定共享图像列表方式;LVS_SHOWSELALWAYS 用来确定一直显示被选中表项方式;LVS_SINGLESEL 用来确定在某一时刻只能有一项被选中;LVS_SMALLICON 用来确定小图标显示方式;LVS_SORTASCENDING 用来确定表项排序时是基于表项文本的升序方式;LVS_SORTDESCENDING 用来确定表项排序时是基于表项文本的降序方式;2、列表控制的属性类列表控制的属性类包括取得列表控制的背景色GetBkColor、设置列表控制的背景色SetBkColor、取得列表控制的图像列表GetImageList、设置列表控制的图像列表SetImageList、取得列表项数目GetItemCount、取得列表控制的属性GetItem、取得与表项相关的数据GetItemData、设置表项的属性SetItem、设置与表项相关的数值SetItemData、取得相关联的下一个表项GetNextItem、设置列表控制的文本颜色SetTextColor、取得列表控制的文本背景颜色GetTextBkColor、设置表项的最大数目SetItemCount和取得被选中表项的数目GetSelectedCount等。3、列表控制的操作方法列表控制的操作方法包括插入一个新的表项InsertItem、删除一个表项DeleteItem、排序表项SortItems、测试列表的位置HitTest、重绘表项RedrawItems、插入一个表列InsertColumn、删除一个表列DeleteColumn、编辑一个表项文本EditLabel和重绘一个表项DrawItem等。(三)列表控制的数据结构列表控制中包含两个非常重要的数据结构LV_ITEM和LV_COLUMN。LV_ITEM用于定义列表控制的一个表项,LV_COLUMN用于定义列表控制的一个表列,其定义格式分别为:typedef struct _LV_ITEM { UINT mask; //结构成员屏蔽位int iItem; //表项索引号int iSubItem; //子表项索引号UINT state; //表项状态UINT stateMask; //状态有效性屏蔽位 LPTSTR pszText; //表项名文本int cchTextMax; //表项名最大长度int iImage; // 表项图标的索引号LPARAM lParam; // 与表项相关的32位数} LV_ITEM; typedef struct _LV_COLUMN { UINT mask; //结构成员有效性屏蔽位int fmt; //表列对齐方式int cx; //表列的象素宽度LPTSTR pszText; //表列的表头名int cchTextMax; //表列名的文本长度int iSubItem; //与表列关联的子表项索引号} LV_COLUMN; 其中fmt可以取如下值:LVCFMT_CENTER 表列居中对齐 LVCFMT_LEFT 表列左对齐(四)列表控制的应用技巧示例本文给出具体实例演示列表控制及前面的表头控制和图像列表的应用技巧。步骤如下:1、通过“FILE->NEW->PROJECTS->MFC AppWizard(EXE)”建立名为VCLIST的工程,在建立过程中选择基于对话框(Dialog based)的应用;将对话框中的默认控件删除,并将所有对话框属性中的Language域设置为Chinese(P.R.C.),以使应用程序支持中文;建立两个图标IDI_GJ和IDI_XS,用来表示图标的选中和非选中状态,对于每个图标都应建立32X32和16X16两种大小,以保证程序的需要; 
    3、在对话框窗口中设计组合框(Group Box),组合框中设置四个无线按钮(Radio)“大图标|小图标|列表|资料”,同时设置排序、删除和关闭三个控制按钮(Button),并在对话框中设置大小合适的列表控制(List Ctrl),其对应标识分别如下:
    --------------------------------------------------------------------------------控制名称 标题名称 标识符号
    --------------------------------------------------------------------------------列表控制 IDC_LISTCTRL组合框 方式 IDC_STATIC无线按钮 大图标 IDC_STDICON小图标 IDC_SMLICON列 表 IDC_LIST资 料 IDC_REPORT按钮 排 序 IDC_SORT删 除 IDC_DEL关 闭 IDOK
    --------------------------------------------------------------------------------4、在设置无线按钮时,需要注意的是只有大图标的Group属性为选中状态,而其它无线按钮的状态均为默认值。5、选中列表控制控件,选择“VIEW->ClassWizard->Memory Variables”,并利用IDC_ LISTCTRL引入成员变量,其变量类型为:变量名 种类 变量类型m_ListCtrl Control ClistCtrl同时利用“MESSAGES MAP”为各无线按钮和命令按钮增加控制功能。6、然后在包含文件和代码文件中分别加入如下代码:(1)在VCLISTDlg.h中增加数据结构和定义typedef struct tagSPS { //定义结构char szPm[10]; //品名int Lx; //0-GJ 1-XSchar szSl[10]; //数量char szDj[10]; //单价char szJe[10]; //金额} SPS;int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort);(2)在VCLISTDlg.CPP中的起始处增加初始化数据和程序定义//在文件开始处增加数据结构初始化SPS Sps[]={//信息{"红梅",0,"1000","30","30000"},{"黄梅",0,"1000","29","29000"},{"绿梅",0,"1000","28","28000"},{"青梅",0,"1000","27","27000"},{"白梅",0,"1000","31","31000"},{"红梅",1,"1000","30","30000"},{"黄梅",1,"1000","29","29000"},{"绿梅",1,"1000","28","28000"},{"青梅",1,"1000","27","27000"},{"白梅",1,"1000","31","31000"}};CImageList Cil1,Cil2;//大小图像列表(3)在程序初始化处增加表头、图像和列表控制建立代码BOOL CVCLISTDlg::OnInitDialog(){CDialog::OnInitDialog();//......//其它代码// TODO: Add extra initialization here此处增加代码LV_ITEM lvitem;LV_COLUMN lvcol;int i,iPos,iItemNum;CVCLISTApp *pApp=(CVCLISTApp *)AfxGetApp();//创建图象列表Cil1.Create(32,32,TRUE,2,2);Cil1.Add(pApp->LoadIcon(IDI_GJ));Cil1.Add(pApp->LoadIcon(IDI_XS));Cil2.Create(16,16,TRUE,2,2);Cil2.Add(pApp->LoadIcon(IDI_GJ));Cil2.Add(pApp->LoadIcon(IDI_XS));//设置图象列表m_ListCtrl.SetImageList(&Cil1,LVSIL_NORMAL);m_ListCtrl.SetImageList(&Cil2,LVSIL_SMALL);//向列表控制中添加表列lvcol.mask=LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;lvcol.fmt=LVCFMT_CENTER;//居中i=0;lvcol.pszText="品 名";lvcol.iSubItem=i;lvcol.cx=70;m_ListCtrl.InsertColumn(i++,&lvcol);lvcol.pszText="数 量";lvcol.iSubItem=i;lvcol.cx=70;m_ListCtrl.InsertColumn(i++,&lvcol);lvcol.pszText="单 价";lvcol.iSubItem=i;lvcol.cx=70;m_ListCtrl.InsertColumn(i++,&lvcol);lvcol.pszText="金 额";lvcol.iSubItem=i;lvcol.cx=70;m_ListCtrl.InsertColumn(i++,&lvcol);//向列表控制中添加表项iItemNum=sizeof(Sps)/sizeof(SPS);for(i=0;i<iItemNum;i++){lvitem.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;lvitem.iItem=i;lvitem.iSubItem=0;lvitem.pszText=Sps[i].szPm;lvitem.iImage=Sps[i].Lx;lvitem.lParam=i;iPos=m_ListCtrl.InsertItem(&lvitem);//返回表项插入后的索引号lvitem.mask=LVIF_TEXT;lvitem.iItem=iPos;lvitem.iSubItem=1;lvitem.pszText=Sps[i].szSl;m_ListCtrl.SetItem(&lvitem);lvitem.iSubItem=2;lvitem.pszText=Sps[i].szDj;m_ListCtrl.SetItem(&lvitem);lvitem.iSubItem=3;lvitem.pszText=Sps[i].szJe;m_ListCtrl.SetItem(&lvitem);}CheckRadioButton(IDC_STDICON,IDC_REPORT,IDC_STDICON);return TRUE; // return TRUE unless you set the focus to a control}