有时候,我们需要在列表框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(, 
                   , 
                   ILC_COLOR32 | ILC_MASK, 
                   ,    ); 
 
ASSERT(m_imgNormal.m_hImageList); 
 
bmp.LoadBitmap(IDB_LB_IMG); 
m_imgNormal.Add( &bmp, -); 
bmp.DeleteObject(); 
m_ListBox.SetImageList(&m_imgNormal); 
 
; i <  ; 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

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

  1. Android实现“是否退出”对话框和“带图标的列表”对话框

    今天我们学习的内容是实现两种对话框(Dialog),第一种是询问是否退出对话框,另外一种是带图标的列表对话框,程序的执行效果是,我们点击button1的时候,弹出第一种对话框,我们点击button2的 ...

  2. 列表框QListWidget类

    QListWidget类也是GUI中常用的类,它从QListView下派生: class Q_GUI_EXPORT QListWidget : public QListView { Q_OBJECT ...

  3. WorldWind源码剖析系列:插件列表视图类PluginListView和插件列表视图项类PluginListItem

    WorldWind中的插件类是个庞大的类,可以说从软件设计层面上统筹可扩展的插件体系的设计思想是WorldWind中的精华,值得学习和借鉴.插件体系中的所用到的类可以分为两大类,一类是插件类Plugi ...

  4. QMUI UI库 控件 弹窗 列表 工具类 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. [WPF]带下拉列表的文本框

    控件我已经弄好了,代码比较多,所以没办法全面介绍. 一开始我是直接继承Selector类来实现,做是做出来了,不过发现性能不太好.于是,我就想着自己来实现.毕竟我是做给自己用的,也不考虑过多的东西,也 ...

  6. MFC编程入门之二十四(常用控件:列表框控件ListBox)

    前面两节讲了比较常用的按钮控件,并通过按钮控件实例说明了具体用法.本文要讲的是列表框控件(ListBox)及其使用实例. 列表框控件简介 列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选 ...

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

    1.列表框中标题栏(Column)的添加 创建一个List Control,其ID为IDC_LIST,在其Styles属性项下的View项里选择Report.Align项里选择Top.Sort项里选择 ...

  8. C#用到windows 消息列表Message类MSG的id代号

    C# Constants:private const UInt32 WM_ACTIVATE = 0x0006;private const UInt32 WM_ACTIVATEAPP = 0x001C; ...

  9. LabVIEW(十六):多列列表框控件

    1.多列列表框控件:前面板右键>列表.表格和树>多列列表框2.默认情况下只显示列首,可设置显示行首:前面板选中多列列表框右键>显示>行首3.LabVIEW中提供42种自带的图标 ...

随机推荐

  1. 手把手教你在Windows端搭建Redmine项目管理软件

    1.Redmine介绍 Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统,据说是源于Basecamp的ror版而来,支持多种数据库,有不少自己独特的 ...

  2. 自定义UISlider的样式和滑块

    又做完一个项目,遂到了写帖时间了,要跟大家分享的是:自定义UISlider的图片和滑块,先看一下效果: 然后是实现了,我们使用的是UISlider的setMinimumTrackImage,和setM ...

  3. [Swust OJ 893]--Blocks

    题目链接:http://acm.swust.edu.cn/problem/893/ Time limit(ms): 1000 Memory limit(kb): 65535   Josh loves ...

  4. BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )

    做一次MST, 枚举不在最小生成树上的每一条边(u,v), 然后加上这条边, 删掉(u,v)上的最大边(或严格次大边), 更新答案. 树链剖分然后ST维护最大值和严格次大值..倍增也是可以的... - ...

  5. django笔记(二)

    Model many-to-many可以通过through来定义详细信息. 表结构: property django可以用F和Q来配合查找,F可以用于同一个model不同field之间进行比较,可以对 ...

  6. JS给元素增加className

    function(element,value) //给元素添加className { if(!element.className) { element.className=value; } else{ ...

  7. ASP.NET MVC 5 学习教程:添加视图

    原文 ASP.NET MVC 5 学习教程:添加视图 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控 ...

  8. 安卓Launcher之获取手机安装的应用列表,安卓launcher

    Launcher中最主要的就是获取所有应用列表的入口以及图标,一般获取的方法有两种: PackageInfo ResolveInfo 运行获取所有APP的Launcher并且允许进行点击事件,进入到应 ...

  9. CreateFile函数使用方法详细介绍

    CreateFileThe CreateFile function creates or opens the following objects and returns a handle that c ...

  10. 飞翔(LIS变形)

    飞翔 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 鹰最骄傲的就是翱翔,但是鹰们互相都很嫉妒别的鹰比自己飞的快,更嫉妒其他的鹰比自己飞行的有技巧.于是,他们决定举办一场 ...