CIconListBox带图标的列表框类

有时候,我们需要在列表框ListBox中插入带图标的文字项,这就需要自己派生一个类出来了,网上的一个CIconListBox类还不错,网站http://www.codeguru.com/Cpp/controls/listbox/article.php/c4749/

这里介绍下使用方法,源代码我有改动,环境Visual Studio 2008 SP1:
1.基于对话框的工程,名称为IconListBoxTest;
2.拖动控件到对话框上,按下图所示排列:

3.导入IconListBox.cpp和IconListBox.h两个文件到工程,在对话框头文件包含

#include "IconListBox.h" 

4.为ListBox控件,改变其属性“Owner Draw”为“Fixed”,其“Has Strings”为“TRUE”添加变量:

CIconListBox m_ListBox; 

添加一个图片列表变量:

CImageList m_imgNormal; 

导入图片资源,修改其ID号为IDB_LB_IMG,在对话框的初始化函数里面添加如下代码(可自己根据修改):

CBitmap bmp; 
m_imgNormal.Create(16, 
                   16, 
                   ILC_COLOR32 | ILC_MASK, 
                   10,    // 初始化图片数量 
                   10); 
 
ASSERT(m_imgNormal.m_hImageList); 
 
bmp.LoadBitmap(IDB_LB_IMG); 
m_imgNormal.Add( &bmp, -1); 
bmp.DeleteObject(); 
m_ListBox.SetImageList(&m_imgNormal); 
 
for(int i = 0; i < 10 ; i++ ) 
    m_ListBox.AddString( _T("Hello World") , i ); 

5.右边按钮的事件如下:

void CIconListBoxTestDlg::OnBnClickedAdd() 

    if(UpdateData()) 
    { 
        if(!m_Str.IsEmpty()) 
            m_ListBox.AddString(m_Str,m_Img); 
        else 
            AfxMessageBox(_T("输入文本字符串!")); 
    } 

 
void CIconListBoxTestDlg::OnBnClickedInsert() 

    if(UpdateData()) 
    { 
        if( m_Str.IsEmpty() ) 
        { 
            AfxMessageBox(_T("输入文本字符串!")); 
            return; 
        } 
        int iSel = m_ListBox.GetCurSel(); 
        if( iSel != LB_ERR ) 
            m_ListBox.InsertString(iSel, m_Str , m_Img); 
        else 
            AfxMessageBox(_T("选择左边列表其中一项!")); 
    }     

 
void CIconListBoxTestDlg::OnBnClickedDelete() 

    int iSel = m_ListBox.GetCurSel(); 
    if( iSel != LB_ERR ) 
        m_ListBox.DeleteString( iSel ); 
    else 
        AfxMessageBox(_T("选择左边列表其中一项!")); 

 
void CIconListBoxTestDlg::OnBnClickedChangeicon() 

    if(UpdateData()) 
    { 
        int iSel = m_ListBox.GetCurSel(); 
        if(iSel != LB_ERR ) 
            m_ListBox.SetItemImage(iSel,m_Img); 
        else 
            AfxMessageBox(_T("选择左边列表其中一项!")); 
    } 

 
void CIconListBoxTestDlg::OnBnClickedImgList() 

    if(UpdateData()) 
    { 
        if( m_Check ) 
            m_ListBox.SetImageList(&m_imgNormal); 
        else 
            m_ListBox.SetImageList(); 
        m_ListBox.RedrawWindow(); 
    } 
    else 
    { 
        ((CButton *)GetDlgItem(IDC_IMG_LIST))->SetCheck(m_Check); 
    } 

6.编译完成。效果如下:

 

源代码下载:http://download.csdn.net/source/2816256

时间: 2024-08-31 00:54:52

CIconListBox带图标的列表框类的相关文章

带Checkbox的列表框

全选 全不选 set值 get值 全选 全不选 set值 get值 重置表单

带Checkbox的列表框_表单特效

全选 全不选 set值 get值 全选 全不选 set值 get值 重置表单

积累的VC编程小技巧之列表框

1.列表框中标题栏(Column)的添加 创建一个List Control,其ID为IDC_LIST,在其Styles属性项下的View项里选择Report.Align项里选择Top.Sort项里选择None. 然后在该List所在对话框的类(头文件)里创建ClistCtrl的一个对象m_list然后在.cpp文件的OnInitDialog()之类的函数里实现如下代码: CString strname[3]; strname[0]="Screen Name"; strname[1]=&

PHP自带ZIP压缩、解压缩类ZipArchiv使用指南

 这篇文章主要介绍了PHP自带ZIP压缩.解压缩类ZipArchiv使用指南,十分详细,需要的朋友可以参考下     要使用该PHP扩展类,需要(PHP 5 >= 5.2.0, PECL zip >= 1.1.0),部分方法需要 PHP 5.2.+,且php.ini配置支持zip 对于win系统,直接去掉php_zip.dll 扩展的注释,然后重启http服务(IIS或Apache)即可 Linux还没有试验,理论上差别不会很大 功能: 1.解压缩zip文件 2.将文件压缩成zip文件 3.追

用C++ Buider制作自绘画列表框

C++ Builder中的列表框和组合框控件都已经提供了自绘画接口.使用这些接口可以实现把列表框和组合框中的项目显示为图像.如果把这种功能封装成组件就更妙了,下面以列表框为例,示范这一过程. 一 实现原理 列表框有的Style属性定义了三种风格,lbStandard风格只能显示文本,bOwner-DrawFixed与lbOwnerDrawVariable风格可以实现自绘画功能,所不同的是,具有前者风格的列表框中每一项的高度都是相同的,后者允许应用程序为每一项定义不同高度. 具有自绘画风格的列表框

VC创建客户区窗口、列表框之间项的拖拽操作

创建客户区窗口 列表框之间项的拖拽操作 在发送绘画(paint)消息时,系统是如何识别某个窗口的客户区或非客户区?当我用 ::CreateWindow 创建窗口时,如何指定客户区矩形? 在创建窗口时不必指定客户区,当收到 WM_NCCALCSIZE 消息时才指定客户区.不管什么时候,只要 Windows 想知道窗口客户区的大小,它便会发送这个消息.在 MFC 中实现 OnNcCalcSize 处理例程.该处理函数有两个参数,从 WPARAM 和 LPARAM 转换而来: void OnNcCal

mfc-MFC中用Clist列表框的控件来显示数据库的问题

问题描述 MFC中用Clist列表框的控件来显示数据库的问题 5C 各位高手大神,你们好:我现在有一个问题:利用ADO读取一个文件(其实本质上是ACCSESS数据库),但是在读取的过程中,比如通过判断"状态"这个字段的值(其实这个字段只保存了两个不同的字符,不是'E'就是'N'),来决定这一行(不是一个单元格)显示的背景颜色,这个功能如何实现?通过消息NM-CUSTOMDRAW?本人菜鸟一个,不知道有没有说清楚,希望水平高的程序员帮我解解惑,不胜感激!贴上部分代码:在类内最开始的位置定

vc++-关于vc编程的小问题:怎么启动程序之前弹出列表框让用户选择

问题描述 关于vc编程的小问题:怎么启动程序之前弹出列表框让用户选择 如图,想实现的功能是,在启动程序时先弹出窗口让用户进行选择(列表框),待用户做出选择以后再进入响应的程序界面,请问怎么实现启动时先弹出这样一个列表框,看别人的程序没发现什么关于列表框的资源啊,.. 解决方案 就你贴出的这个界面,是MFC自带的.只要你定义了2种或者以上的DocumentTemplete,自然就会出现这个选择框. 解决方案二: http://dev.yesky.com/398/2341898_2.shtmlhtt

创建客户区窗口,列表框之间项的拖拽操作

我写了一个小类库,其中包含一个类,CDragDropMgr,用这个类可以在自己的应用程序窗口间添加拖拽行为.我还写了一个测试程序,DDTest,示范了如何使用 CDragDropMgr 类(参见 Figure 2).Figure 3 是程序运行的画面.DDTest 有两个列表框和一个编辑框.你可以将第一个列表框中的项目拖拽到第二个列表框,或者编辑框.此外,你还能在第二个列表框里通过拖拽重排项目.DDTest 就是使用 CDragDropMgr 来实现上述这些功能的.下面我首先示范如何使用 CDr