![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| LexusCheby |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 28.1.2007 Репутация: нет Всего: нет |
есть класс
class CResourceList { map<ULONG, CImage> List; public: .... }; //по _ID заружает изображение и сохраняет в контейнере ULONG CResourceList::LoadImage(ULONG _ID) { CImage mImg; char* FName; if(!GetImgPath(_ID, &FName)) return 0; mImg.Destroy(); mImg.Load(FName); List.insert(pair<ULONG, CImage>(_ID, mImg)); return 1; } Есть член, который по ID возвращает указатель на CImage(2й параметр) ULONG CResourceList::GetCImagePtr(ULONG _ID, CImage **_ImgPtr) { *_ImgPtr=&(List.find(_ID)->second); return 1; } потом при попытке вывести изображение по указателю возникает ошибка int FWidth=pCImage->GetWidth(); int FHeight=pCImage->GetHeight(); pCImage->StretchBlt(dc,10,10,FWidth,FHeight,FWidth*0,FHeight*0,FWidth,FHeight, SRCCOPY); Подскажите почему ошибка. Найти другой путь могу. Хотелось бы причину понять |
|||
|
||||
| Daevaorn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
какая?
Лучше так:
|
||||
|
|||||
| LexusCheby |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 28.1.2007 Репутация: нет Всего: нет |
Программа компилируется нормально, возникает ошибка времени выполнения при выводе CImage
Программа корректно проверяет различные условия, связанные с пустыми указателями. Ошибка в ATL-овском методе ReleaseDC. У меня подозрание, что нельзя хранить в контейнерах класс CImage. Может указатели надо хранить?. Все то же самое вне контейнеров прекрасно работало. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
посмотри исходники -- что просиходит при копировании CImage. явно хендл просто копируется...
даже если бы при копировании создавался новый объект -- по этой же причине не рекомендуется хранить CImage -- только лишнее время уйдет на создание нового объекта. -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| LexusCheby |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 28.1.2007 Репутация: нет Всего: нет |
Да, hunter, тоже к таким выводам прихожу. То есть при добавлении в map копирование у нас вызывается. А оно не весь объект копирует. Как лучше тогда сделать? Что вместо CImage в map хранить. Bitmap?
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
с Bitmap' ом (если имеется в виду CBitmap) будет то же самое.
храни указатели (CImage*). в принципе всегда (за исключением неких конкретных случаев) в контейнере лучше хранить указатель на объект чем сам объект... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| LexusCheby |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 28.1.2007 Репутация: нет Всего: нет |
Надеюсь что хранение указателей поможет. Попробую. Напишу о результах. Если все заработает (уверен что заработает), то обязательно возьму на заметку что лучше хранить в контейнерах указатель, а не сам объект.
|
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 3 Всего: 8 |
Или же почему сразу не делать как делают все без копирования?
Это сообщение отредактировал(а) HappyLife - 30.1.2007, 11:01 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |