如何向CImageList中加入位圖文件
發表于:2007-07-14來源:作者:點擊數:
標簽:
在MFC中CImageList類封裝了圖象列表控件的功能,圖象列表控件是相同大小圖象的一個集合,用于應用程序中大規模圖標的存儲,該控件是不可見控件,通常與其它控件一起使用,來為其它控件提供圖標資源。圖象的每個集合中均以0為圖象索引基數,可以把這些圖標看
在MFC中CImageList類封裝了圖象列表控件的功能,圖象列表控件是相同大小圖象的一個集合,用于應用程序中大規模圖標的存儲,該控件是不可見控件,通常與其它控件一起使用,來為其它控件提供圖標資源。圖象的每個集合中均以0為圖象索引基數,可以把這些圖標看成是以數組方式存儲的,圖像列表通常由大圖標或位圖構成,其中包含位圖模式,實際上,所有的在同一個圖象列表中的圖標都被存儲在一個屏幕設備的位圖中。
通常向CImageList對象中添加圖像元素的方法是:首先把圖標或位圖調入資源文件中,然后調用CImageList:Add方法加入到圖象列表控件中,將位圖裝入資源導致可執行文件增大,不利于軟件發行,而且只能使用資源中有限的位圖,無法選取其它位圖。要彌補使用資源位圖的不足,就必須直接使用BMP位圖文件。
使用下列代碼即可實現:
HBITMAP hBitmap;
CBitmap *pBitmap;
CImageList *pImageList;
pImageList=new CImageList;
pImageList->Create (32,32,ILC_COLOR4,5,2);
pBitmap=new CBitmap;
hBitmap=(HBITMAP)LoadImage(NULL,FilePathName,IMAGE_BITMAP,0,0,
LR_LOADFROMFILE);//FilePathName 是位圖文件完整路徑字符串
pBitmap->Attach (hBitmap);
pImageList->Add (pBitmap,RGB(0,0,0));
下面結合一個實例詳細說明的用法:
例程解析:
例程基于一個對話框,單擊對話框中的‘添加bmp’按鈕彈出文件選擇框,選擇一個bmp文件,即可把選種bmp文件加入到列表控件中。在MFC中,CLIstCtrl類封裝了列表控件,主要用來以各種方式顯示一組數據記錄供用戶進行各種操作,列表中的記錄可以包括多個數據項,也可以包括表示數據內容的大小圖標,用來表示數據記錄的各種屬性,
Windows資源管理器的右側框架就是一個非常典型的列表控件。
新建MFC AppWiazrd[exe]工程,工程名稱ImageListAddBmp,點OK,選中Dialog based 點下一步,剩下的幾步用缺省值,一直按下一步直到完成,工程建立完畢。按以下步驟設置幾個變量,填寫事件代碼:
1. 在IDD_IMAGELISTADDBMP_DIALOG對話框中加入ClistCtrl控件和一個按紐,按紐Caption為“添加bmp”。
2. 使用類向導添加CtrlList控件變量m_ListCtrl。
3. 在CimageListAddBmpDlg類中添加下面兩個公用變量:
int index;
CImageList *pImageList;
4. 在BOOL CImageListAddBmpDlg::OnInitDialog()初始化函數中,
// TODO: Add extra initialization here語句后面添加以下代碼
index=0;
pImageList=new CImageList;
pImageList->Create (32,32,ILC_COLOR4,5,2);
m_ListCtrl.SetImageList (pImageList,LVSIL_NORMAL );
5. 在IDD_IMAGELISTADDBMP_DIALOG對話框中雙擊‘添加bmp’按鈕,加入Onbutton1單擊事件代碼:
void CImageListAddBmpDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString FilePathName,FileName;
CFileDialog dlg(TRUE);///TRUE為OPEN對話框,FALSE為SAVE AS對話框
if(dlg.DoModal()==IDOK)
{
FilePathName=dlg.GetPathName();
HBITMAP hBitmap;
CBitmap *pBitmap;
pBitmap=new CBitmap;
hBitmap=(HBITMAP)LoadImage(NULL,FilePathName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
pBitmap->Attach (hBitmap);
pImageList->Add (pBitmap,RGB(0,0,0));
FileName=dlg.GetFileName ();
m_ListCtrl.InsertItem (index,FileName,index);
index++;
}
}
到這里你可以編譯運行了,在VC6.o下編譯通過。
原文轉自:http://www.anti-gravitydesign.com