Часто программы используют списки изображений для решения многих задач. Кроме того списки изображений используют многие элементы управления, то есть вот какие
Использовать списки изображений можно в разных областях. Вобщем-то это массив картинок. И естественно это удобно, так как к картинкам можно обращаться по индексу. Для создания, хранения и использования есть класс 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; }
Вот создавать список мы научились. Это хорошо.