простенький вопрос про указатель на dc :)
От: Jer  
Дата: 02.12.01 00:04
Оценка:
Думаю (надеюсь:) ) для многих этот вопрос покажеться простым, если так, то видимо мне помогут :)

Trouble: функция OnDraw выводит монстро-образное изображение, а другая функция (OnMouseMove) должна на нём кое-что интерактивно изменить — создавать лишние переменные для хранения результатов её работы да ещё и перерисовывать каждый раз всё изображение выдет накладно, я решил получить такой же указатель какой передаётся в OnDraw, но увидев список параметров CDC.Create(....) немного обламался :(. Я попробовал обойти это так:

void CMyProgView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
......................................
dc.Detach();
dc.CreateCompatibleDC(pDC);
......................................
}

dc соответственно общая переменная-член класса, в которой хранится подобие pDC в памяти, но вот как её привязать к реальному "девайсу" я не нашёл. Кстати, на поверку она не хранит никакой информации о логических координатах и типе их преобразования — кто-нибудь знает как туда это всё скопировать без конструкций типа

dc.SetSomeParam( pDC->GetSomeParam() ); ?

Заранее благодарен, Борис.
Re: простенький вопрос про указатель на dc :)
От: Jer  
Дата: 02.12.01 02:05
Оценка:
А решалось всё как всегда элементарно:

void CMyProgView::OnMouseMove(UINT nFlags, CPoint point)
{
............................................
CDC* pDC = GetDC();
............................................
}

и рисуй сколько влезет...
— 2 часа жизни — надеюсь кому-нибудь пригодится.
Re: простенький вопрос про указатель на dc :)
От: Lexey Россия  
Дата: 02.12.01 10:08
Оценка:
Здравствуйте Jer, Вы писали:

Jer>Думаю (надеюсь ) для многих этот вопрос покажеться простым, если так, то видимо мне помогут


Jer>Trouble: функция OnDraw выводит монстро-образное изображение, а другая функция (OnMouseMove) должна на нём кое-что интерактивно изменить — создавать лишние переменные для хранения результатов её работы да ещё и перерисовывать каждый раз всё изображение выдет накладно, я решил получить такой же указатель какой передаётся в OnDraw, но увидев список параметров CDC.Create(....) немного обламался . Я попробовал обойти это так:


Jer>void CMyProgView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)

Jer>{
Jer>......................................
Jer> dc.Detach();
Jer> dc.CreateCompatibleDC(pDC);
Jer>......................................
Jer>}

Jer>dc соответственно общая переменная-член класса, в которой хранится подобие pDC в памяти, но вот как её привязать к реальному "девайсу" я не нашёл. Кстати, на поверку она не хранит никакой информации о логических координатах и типе их преобразования — кто-нибудь знает как туда это всё скопировать без конструкций типа


А зачем тебе дополнительный DC? CreateCompatibleDC всегда создает memory DC и то, что рисуется на нем, нужно потом трансферить в основной DC чем-нибудь типа BitBlt.
Мне думается, что тебе лучше создавать не compatible DC, а CompatibleBitmap, а потом делать из него SetDIBitsToDevice на твой DC. Кстати, bitmap тебе в любом случае придется создавать, т.к. CreateCompatibleDC всегда создает DC, в который выбран монохромный битмап 1x1.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.