Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > GDIPlus уничтожение объектов


Автор: qwantor 7.2.2009, 11:32
Доброго времени суток!

У меня возникли траблы с GDI+:
Предисловие:
У класса контрола есть private поле Graphics* gr, есть public метод virtual Graphics* GetCurrentGraphics(), который пока тупо возвращает gr.
gr создаётся в OnPaint(). 
Есть наследник этого контрола, с помощью которого надо будет кое-что рисовать...
Проблема:
вот код GetCurrentGraphics исходного контрола:
Код

Graphics*  GDIPlusPictureBox::GetCurrentGraphics()
{
    //ToDo возвращать Graphics* на текущий Image
    return this->gr;
    
}

вот код GetCurrentGraphics производного контрола:
[code=cpp]
Graphics* DicomImageViewer::GetCurrentGraphics()
{
    
    return GDIPlusPictureBox::GetCurrentGraphics();
}
[/cod
вот код OnPaint-a производного контрола:
Код

GDIPlusPictureBox::OnPaint();
Graphics *gr=GetCurrentGraphics();
/*
Pen p(Color(255, 255, 0, 0) ,1);
gr->DrawLine(&p,10,10,100,100);
 */

В полученном gr поле NativeGraphics=NULL. Адрес в памяти на gr совпадает с тем, который создаётся, а вот NativeGraphics походу дела успевает уничтожится.
И т.о. при использовании полученного Graphics вылетают исключения, что плохо. Честно говоря это меня очень расстраивает, т.к. всё, что  мне нужно сделать было продуманно с использованием передачи укзателя на Graphics. Подскажите, пожалуйста, как мне быть, как заставить NativeGraphics не уничтожаться или как передавать Graphics*??? smile

 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)