CIconListBox帶圖標的列表框類
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
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 );
{
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);
}
}
有時候,我們需要在列表框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
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成