C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 169 - Добавляем элементы в список изображений / MFC шаг за шагом / Visual C++

Шаг 169 - Добавляем элементы в список изображений

Итак, в прошлый раз мы создали с Вами список изображений. Но изображения в этот список надо помещать откуда-то. Выходов много. Например, завести кучу BMP файлов в каталогах или, например, картинок в ресурсах. Мы поступим по другому. Мы добавим в ресурсы иконы ICON три штуки. И потом поместим эти иконы в список изображений. Будем дальше мучать наш прошлый проект. Только если мы посмотрим на иконы, то увидим, что они стандартные, то есть 32X32 поэтому давайте подправим нашу функцию Create. Вот так.

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

Итак, идем в ресурсы и создаем три иконы.

169_1.gif (2955 b)

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

class CTestImageDlg : public CDialog
{
// Construction
public:
	BOOL InsertIcon();
	CImageList cl;
	.....
};

А вот и сам код функции.

BOOL CTestImageDlg::InsertIcon()
{
HICON hIcon;
hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON1)); 
if (hIcon!=NULL) 
{
     if (cl.Add(hIcon)==-1) return FALSE;
}
else return FALSE;
hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2)); 
if (hIcon!=NULL) 
{
     if (cl.Add(hIcon)==-1) return FALSE;
}
else return FALSE;
hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON3)); 
if (hIcon!=NULL) 
{
     if (cl.Add(hIcon)==-1) return FALSE;
}
else return FALSE;
return TRUE;
}

Ну чего эдесь. Здесь много знакомого. Во-первых мы получаем указатель на икону с использованием LoadIcon. Здесь у нас две альтернативы. Первая воспользоваться методом LoadIcon от класса CWinApp или той же функций из Win 32 API. Вот. Разницы практически нет, так как в классе диалога CWinApp не доступен. Конечно его можно запросить, но по мне все одно, что так что как я сделал. Если у кого есть веские аргументы пишите.

LoadIcon может вернуть NULL, а не какой не указатель. Это мы и проверим. Кроме того функция Add может завершиться неудачей. По разным причинам. Ну не знаю, пусть памяти не хватит, например. В любом случае, если неудача она вернет -1. Это мы тоже проверяем. И так мы делаем три раза. Если наша программа пройдет сквозь все терни она вернет нам TRUE, иначе FALSE ну тут как говорят - "невиноватая я, он сам пришел" :-).

По поводу функции Add она тоже может быть в нескольких вариантах. Вот смотрите.

int Add( CBitmap* pbmImage, CBitmap* pbmMask );
int Add( CBitmap* pbmImage, COLORREF crMask );
int Add( HICON hIcon );

Вот и добавлять изображения мы научились наконец. Скоро научимся пользоваться :-)


| |
Автор Каев Артем.
[AD]