Шаг 168 - Списки изображений

Часто программы используют списки изображений для решения многих задач. Кроме того списки изображений используют многие элементы управления, то есть вот какие

Использовать списки изображений можно в разных областях. Вобщем-то это массив картинок. И естественно это удобно, так как к картинкам можно обращаться по индексу. Для создания, хранения и использования есть класс CImageList этот класс и хранит списки изображений.

Ну чего будем пробовать ??? Создавайте приложение на базе диалогового окна. Простое диалоговое окно пока. С MFC AppWizard естесвенно. Дайте имя приложению TestImage. Объявим класс в классе диалога.

class CTestImageDlg : public CDialog
{
// Construction
public:
	CImageList cl;
..........

Вот класс есть :-) . Но только массив надо еще и создать. Создается этот массив изображений функцией Create. Можно вот так.

BOOL CTestImageDlg::OnInitDialog()
{
	.............
	// TODO: Add extra initialization here
	cl.Create(16,16,FALSE,3,0);
	..........
	return TRUE;  // return TRUE  unless you set the focus to a control
}

Эта функция как видите имеет 5 параметров. Какие ??? Типа того, что хочу всё знать. Ну давайте посмотрим.

BOOL Create
( 
	int cx, 		// Ширина картинки
	int cy, 		// Высота картинки
	UINT nFlags, 		// Является ли изображение маской
	int nInitial, 		// Количество изображений в списке
	int nGrow 		// На какое количество можно динамически увеличить.
);

Мы вроде делаем как 16Х16 для того, чтобы можно было загрузить иконы, не маску, из трех элементов и добавлять изображения нельзя.

Кстати я совсем забыл, что у этого класса есть конструктор по умолчанию, поэтому я так просто и описал в классе. Вот он.

CImageList( );

Итак, создание списка изображений производится в два этапа. Первый этап создание класса с помощью конструктора, который не требует параметров и второй этап вызов функции Create, в которой мы подробно объясняем как и что нужно хранить.

Кстати функция Create для данного класса перегруженна, то есть имеет много вариантов с разными параметрами.

BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow );
BOOL Create( UINT nBitmapID, int cx, int nGrow, COLORREF crMask );
BOOL Create( LPCTSTR lpszBitmapID, int cx, int nGrow, COLORREF crMask );
BOOL Create( CImageList& imagelist1, int nImage1, CImageList& imagelist2, int nImage2, int dx, int dy );
BOOL Create( CImageList* pImageList );

Вот на любой вкус. Кстати эта функция, в смысле Create, может и не сработать. То есть завершиться ошибкой. Эта функция возвращает ненулевое значение если удачно, иначе вернет нуль. Давайте будем проверять. Например так.

if (!cl.Create(16,16,FALSE,3,0)) 
{
	AfxMessageBox("Error Create ImageList");
	return FALSE;
}

Вот создавать список мы научились. Это хорошо.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 17.04.2000