Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Как при перемещении картинки избавиться от эффекта мерцания

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

VitaliyB



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Сабж в общем-то. А если подробнее, то вот:
 
Вывожу на экран несколько картинок.
При ONLBUTTONDOWN
для соответствующей картинки устанавливаю флаг,
что буду ее передвигать.
Потом при ONMOUSEMOVE  
меняю координаты картинки и
 
this->RedrawWindow(NULL,NULL,RDW_INVALIDATE | RDW_UPDATENOW)
 
Однако при наложении картинок виден эффект мерцания.
Как этого избежать? ПОМОГИТЕ, плиз!

Всего записей: 579 | Зарегистр. 14-04-2003 | Отправлено: 11:08 12-02-2004
mcs



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В чем ты пишешь?

Всего записей: 453 | Зарегистр. 30-01-2003 | Отправлено: 19:16 12-02-2004
VitaliyB



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В названии темы написано:
Visual C++

Всего записей: 579 | Зарегистр. 14-04-2003 | Отправлено: 19:18 12-02-2004
WiseAlex



Софтовых дел М...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VitaliyB
вот грубый вариант
//class CClientView:CView
int maxX,maxY;
void CClientView::OnInitialUpdate()
{
static bool Initialized=false;
if (!Initialized)
{
CView::OnInitialUpdate();
maxX=GetSystemMetrics(SM_CXSCREEN);
maxY=GetSystemMetrics(SM_CYSCREEN);
CClientDC dc(this);
memDC.CreateCompatibleDC(&dc);
memDC.SetBkMode(TRANSPARENT);
//potential problem if the user change screen resolution to a bigger value
bmp.CreateCompatibleBitmap(&dc,maxX,maxY);
memDC.SelectObject(&bmp);
Initialized=true;
};
Invalidate();
}
 
void CClientView::OnDraw(CDC* pDC)
{
CStrimClientDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
 
RECT clientRect;
GetClientRect(&clientRect);
 
// only paint the rect that needs repainting
myDrawFunction(&memDC);//draw what you need
           CRect rect;
            memDC.GetClipBox(&rect);     // copy the area needed.
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,SRCCOPY);
}
BOOL CClientView::OnEraseBkgnd(CDC* pDC)
{
return TRUE;Simulate erasing
}
 
идея в создании буферного битмапа и рисовании в него - а затем копирование на экран
здесь создается битмап на весь экран - можно создать только для своего куска
 
и еще (может и не по теме) есть CRectTracker - он делает всякие перемещения, но только без отображения содержимого при перетаскивании

Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 23:06 12-02-2004
mcs



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VitaliyB
Сорри не заметил темы
А для VС++ я делал как WiseAlex

Всего записей: 453 | Зарегистр. 30-01-2003 | Отправлено: 23:21 12-02-2004
VitaliyB



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Классно!!! Пасиба!!!!
Щас попробую, напишу результат
 
Добавлено
АААА, еще забыл!
 
А если я загружаю файлы GIF
с помощью IPicture,
как мне помом можно получить Bitmap,  
чтобы выводить его на экран  
данным методом?
 
 
 
Добавлено
То есть, грубо говоря (чтобы конкретизировать вопрос),
есть у меня СDC mdc, в котором есть уже сформированный рисунок.
Как мне его отобразить CPaintDC dc(this).
Код :
 
CPaintDC (или CClientDC) dc(this);
CDC mdc;
 
Что тут делать с mdc ????
 
FormDC(&mdc); //здесь записываеться рисунок в dc
 
Что тут делать ????
 
 
----------------------------------------------------
 
Буду очень благодарен...
 
 
 
 
 

Всего записей: 579 | Зарегистр. 14-04-2003 | Отправлено: 10:41 13-02-2004
ollv

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 Короче есть у мя класс CBitmapPicture субклассишь его на статик у него прописаны  все функции он драитем и проч.., сделаешь ему SetBitmap(HBITMAP) и все а можешь посмотреть просто как там делается и сделаешь так-же.., перерисовывается сам. могу отослать пиши в ПМ..

Всего записей: 165 | Зарегистр. 25-12-2003 | Отправлено: 13:05 13-02-2004
ollv

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
отослал ..

Всего записей: 165 | Зарегистр. 25-12-2003 | Отправлено: 15:40 14-02-2004
VitaliyB



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ollv
Спасибо!!!

Всего записей: 579 | Зарегистр. 14-04-2003 | Отправлено: 10:47 16-02-2004
Sve



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А если на C++Builder?

Всего записей: 311 | Зарегистр. 16-05-2002 | Отправлено: 12:16 19-04-2004
VitaliyB



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sve
Незнаю...

Всего записей: 579 | Зарегистр. 14-04-2003 | Отправлено: 12:23 19-04-2004
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Как при перемещении картинки избавиться от эффекта мерцания


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru