CIconListBox带图标的列表框类

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

有时候,我们需要在列表框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

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3月前
MFC隐藏对话框边框和可拖动
MFC隐藏对话框边框和可拖动
|
5月前
16 MFC - 组合框(下拉框) CComboBox
16 MFC - 组合框(下拉框) CComboBox
19 0
|
索引 Windows 程序员