Здравствуйте, Константин, Вы писали:
К>Здравствуйте, Citadel, Вы писали:
C>>Почему компилятор ругается на этот код:
C>>... C>>void CMainWindow::OnPaint(СDC* pDC) C>>...
C>>Текст ошибки: error C2440: 'static_cast' : cannot convert from 'void (__thiscall CMainWindow::* )(CDC *)' to 'void (__thiscall CWnd::* )(void)'
К>Насколько я помню, OnPaint() должен быть без параметров. Это в OnDraw есть параметр CDC* pDC.
Здравствуйте, Citadel, Вы писали:
К>>Насколько я помню, OnPaint() должен быть без параметров. Это в OnDraw есть параметр CDC* pDC.
C>А как через OnPaint вывести Bitmap?
Здравствуйте, Константин, Вы писали:
К>Здравствуйте, Citadel, Вы писали:
К>>>Насколько я помню, OnPaint() должен быть без параметров. Это в OnDraw есть параметр CDC* pDC.
C>>А как через OnPaint вывести Bitmap?
К>void CMyWnd::OnPaint() К>{ К> CPaintDC dc(this); // device context for painting К> dc.LineTo(100, 100); К>}
Но это же не изображение. На "стандартные примитивы" и текст-то он не ругается а вот с растровыми изображениями проблема. Что делать?
Здравствуйте, Citadel, Вы писали:
C>Но это же не изображение. На "стандартные примитивы" и текст-то он не ругается а вот с растровыми изображениями проблема. Что делать?
Поподробнее можно? Какой код, на что ругается, как именно ругается? Возьми тот же код, что ты приводил в первом посте, и замени там использование pDC на локальную переменную CPaintDC dc(this). Что тогда будет?
Hello, Citadel! Вы писали
C> Но это же не изображение. На "стандартные примитивы" и текст-то он C> не ругается а вот с растровыми изображениями проблема. Что делать?
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Привет!
PD>GDI wrote: >> >> Hello, Citadel! Вы писали >> >> C> Но это же не изображение. На "стандартные примитивы" и текст-то он >> C> не ругается а вот с растровыми изображениями проблема. Что делать? >> >> Как это?? >> >> [ccode] >> CMyWnd::OnPaint() >> { >> CPainDC dc(this); >> >> CDC memDC; PD> memDC.CreateCompatibleDC(&dc) >> CBitmap memBitmap; >> memBitmap.LoadBitmap(IDB_EOLYPALY); >> CBitmap* pOldBitmap=memDC.SelectObject(&memBitmap); >> dc.BitBlt(0,0,200,200, &memDC, 0,0, SRCCOPY); >> memDC.selectobject(pOldBitmap); >> memDC.DeleteDC(); >> }
PD>-- PD>With best regards, PD> Pavel Dvorkin
Кажись заработало... Спасибо, народ!
Еще пара вопросов:
1. Как загружать картинку не из ресурсов, а из файла на диске?
2. Для чего писать CBitmap* pOldBitmap=memDC.SelectObject(&memBitmap);, если можно memDC.SelectObject(&memBitmap); Есть какая-нибудь разница?
Hello, Citadel! Вы писали: C> Кажись заработало... Спасибо, народ! C> Еще пара вопросов: C> 1. Как загружать картинку не из ресурсов, а из файла на диске? C> 2. Для чего писать CBitmap* C> pOldBitmap=memDC.SelectObject(&memBitmap);, если можно C> memDC.SelectObject(&memBitmap); Есть какая-нибудь разница?
pOldBitmap это указатель на "старый" битмап, т.е. который был создан вместе с контектом. Когда ты выбираешь в контекст новый объект, то старый отключается и будет потерян если не сохранить на него указатель. В результате получится утечка памяти, что тебе и было нужно!
А как загружать картинку из файла, уже 10000000000000 раз обсуждалось.... наверное... может быть... когда-то... где-то... для чего-то... у кого-то... зачем-то.... .