CIconListBox带图标的列表框类
来源:互联网 发布:软件职业技术学院 编辑:程序博客网 时间:2024/06/03 20:04
有时候,我们需要在列表框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 );
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);
}
}
{
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带图标的列表框类
- 带图标的列表对话框
- android弹出带图标的列表对话框
- 实例6:带图标的列表对话框
- 【Android开发】范例2-带图标的列表对话框
- 带图标的组合框
- android dialog ——列表项带图标的列表对话框、模拟菜单项带
- 16. android dialog ——列表项带图标的列表对话框、模拟菜单项带图标
- 带Checkbox的列表框
- 带Checkbox的列表框
- day15 带图标的输入框
- 带图标的button
- 带图标的ListView
- 带图标的input
- Android实现“是否退出”对话框和“带图标的列表”对话框
- Android实现“是否退出”对话框和“带图标的列表”对话框
- 带颜色文字的列表框
- 实现带复选框的下拉列表
- 美元转中文
- 郁闷~~~
- 解读C++编译器编译功能
- 部分背包问题(贪心)
- “运行错误-不能识别对象”的处理方法
- CIconListBox带图标的列表框类
- 【狩猎】:我看3Q大战
- The #if, #elif, #else, and #endif Directives
- 再看sizeof
- nagios
- JSON格式
- 反网络爬虫策略(转自Javaeye)
- 0/1背包问题动态规划详解
- linux 某个进程内存数据查看