CPictureHolder + SDI = first-chance exception
От: anton Россия http://rykun.narod.ru
Дата: 30.05.02 18:26
Оценка:
Делаем примерно так:

CMyView::OnDraw(CDC* pDC)
{
CPictureHolder pic;
pic.CreateFromBitmap(IDB_BITMAP1);
pic.Render(pDC, CRect(20, 20, 100, 100), 0);
}

Затем, каждые 100-300 мс по таймеру вызывается Invalidate();
В debug получаем:
> First-chance exception in my.exe (GDI32.DLL): 0xC0000005: Access
Violation.
> First-chance exception in my.exe (GDI32.DLL): 0xC0000005: Access
Violation.

Таких строчек может быть и много, а может и не быть совсем, как повезет.
От этого можно как-то избавиться?
Кстати, несмотря на это, все работает на ура.
MSDN гласит, что CPictureHolder предназначен для вывода картинок в
контролах, но как же тогда правильно вывести битмап на экран с заданными
координатами и размером в обычном SDI-документе?

PS 98se, vc6sp5
// anton
Re: CPictureHolder + SDI = first-chance exception
От: Андрей Россия  
Дата: 31.05.02 03:20
Оценка:
Здравствуйте anton, Вы писали:

skip

Можешь на это дело забить — эти сообщения говорят о том, что возникшее исключение было успешно обработано. Это вполне нормальная ситуация.
Re[2]: CPictureHolder + SDI = first-chance exception
От: Аноним  
Дата: 31.05.02 08:48
Оценка:
Здравствуйте Андрей, Вы писали:

А>Можешь на это дело забить — эти сообщения говорят о том, что возникшее исключение было успешно обработано. Это вполне нормальная ситуация.


Понятно.
Видимо это такой же баг, как и тот, что описан в одном из артиклей
KB, насчет функции ChoosePixelFormat.

Пришлось сделать пустой catch(...), вроде ничего не пишется.
Спасибо за помощь.

// anton

PS. Самое нехорошее в этом было то, что был очень затруднен дебаг
(трудно было отслеживать TRACEs и сильные тормоза)
Re: CPictureHolder + SDI = first-chance exception
От: OlegO Россия http://www.mediachase.ru
Дата: 31.05.02 10:48
Оценка:
Здравствуйте anton, Вы писали:

A>Делаем примерно так:

A>
A>CMyView::OnDraw(CDC* pDC)
A>{
A> CPictureHolder pic;
A> pic.CreateFromBitmap(IDB_BITMAP1);
A> pic.Render(pDC, CRect(20, 20, 100, 100), 0);
A>}
A>
A>Затем, каждые 100-300 мс по таймеру вызывается Invalidate();
A>В debug получаем:
A> > First-chance exception in my.exe (GDI32.DLL): 0xC0000005: Access
A>Violation.
A> > First-chance exception in my.exe (GDI32.DLL): 0xC0000005: Access
A>Violation.
A>
A>Таких строчек может быть и много, а может и не быть совсем, как повезет.
A>От этого можно как-то избавиться?
A>Кстати, несмотря на это, все работает на ура.
A>MSDN гласит, что CPictureHolder предназначен для вывода картинок в
A>контролах, но как же тогда правильно вывести битмап на экран с заданными
A>координатами и размером в обычном SDI-документе?

A>PS 98se, vc6sp5


Попробуй переменную CPictureHolder pic вынести в класс, а например строку
...
pic.CreateFromBitmap(IDB_BITMAP1); 
...


например в конструктор, не гоже это как-то 100-300 тратится на создание объекта и его убийство, может заодно и твою проблему решит.
С уважением, OlegO.
Re[2]: CPictureHolder + SDI = first-chance exception
От: Аноним  
Дата: 31.05.02 17:53
Оценка:
Здравствуйте OlegO, Вы писали:

OO>Попробуй переменную CPictureHolder pic вынести в класс, а например строку

OO>
OO>...
OO>pic.CreateFromBitmap(IDB_BITMAP1); 
OO>...
OO>

OO>например в конструктор, не гоже это как-то 100-300 тратится на создание объекта и его убийство, может заодно и твою проблему решит.

На самом деле у меня все делается так, как ты описал, просто для краткости вопроса пришлось придумать простенький пример...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.