Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Движение изображения. Обновляем по таймеру


Автор: MoZy 4.8.2006, 21:01
Как бы сделать чтобы этих полос не было и откуда они берутся? smile 

Автор: GremlinProg 4.8.2006, 21:59
Выводи изображение в окно через двойной буфер. Я так понял, ты выводишь большой битмап.

Автор: Sheff 4.8.2006, 22:13
MoZy, создай в памяти HDC ассоциируй с ним bitmap и рисуй на нём, а потов в OnDraw или на WM_PAINT не знаю как там у тебя рисуй из HDC в памяти на окне или где нужно...
Т.е сначала:
Код

  if(!pDC) pDC = GetDC();
   if(!m_memDC.m_hDC) m_memDC.CreateCompatibleDC(pDC);
   if(!m_bmp.m_hObject) m_bmp.CreateCompatibleBitmap(pDC, TotalSize.cx, TotalSize.cy);
   m_memDC.SelectObject(&m_bmp);
   if(!m_bkbrush.m_hObject) m_bkbrush.CreateStockObject(WHITE_BRUSH);
   m_memDC.SelectObject(&m_bkbrush);
   m_memDC.PatBlt(0, 0, TotalSize.cx, TotalSize.cy, PATCOPY);

Потом в OnDraw:
Код

pDC->BitBlt(0, 0, TotalSize.cx, TotalSize.cy, &m_memDC, 0, 0, SRCCOPY);

Автор: MoZy 4.8.2006, 22:21
битмап маленький. таймер быстрый. а эти полосы... периодически появляются, причем период больше чем у таймера в несколько раз.

Цитата

Выводи изображение в окно через двойной буфер


каким это образом? Мне надо по таймеру и чтоб окно не было "прозрачным" от этого двойного буфера. И полосы все равно проходят:
user posted image

Это иммитация, так как соскриншотить не получается

Sheff, спасибо за идейку )) Я как видишь вроде как тоже сначала операции в скрытом хдц делаю, а потом на главный вовожу, но чтоб ВСЕ делать на скрытом (то есть все движения, все декорации  smile ), а потом только на главный выводить в види одного питмапа я че-то не допер  smile 

Спасибо!

Автор: GremlinProg 4.8.2006, 22:29
Цитата(MoZy @  5.8.2006,  00:21 Найти цитируемый пост)
каким это образом?

Sheff, показал каким

еще лучше перехватить сообщение WM_ERASEBKGND и не вызывать для него обработку "по-умолчанию", вместо этого, вернуть 1. Так задний фон не будет перекрашиваться каждый раз, когда требуется обновить окно.

Автор: Sheff 5.8.2006, 01:05
MoZy, ты делаешь что-то типа игры ?
Тогда лучше вообще наверное DirectX юзать или OGL т.к GDI очень прожорлив

Автор: MoZy 8.8.2006, 19:57
Sheff, конечно прожорлив, но пока и так сойдет  smile 

Автор: OXOTHUK 10.8.2006, 10:23
MoZy, в DirectX(я думаю имеется в виду Direct3D) и в OpenGL тебе придётся работать с 3х мерной графикой. А так как ты мутил на GDI, предполагаю тебе легче и сподручнее 2х мерную. Тогда надо использовать DirectDraw. Он в принципе простой, но у меня появились проблемы с поворотом изображения на угол и выводом текста. Правда в GDI если при прорисовке указать RECT source нормальный, а dest меньше, то появляются какие-то чёрные полосы, а в DirectDraw такого нет, поэтому путём несложных мат. вычислений, можно сделать один движок, но при задании разного разрешения экрана, он будет просто сжимать изображение и поэтому не придётся их двигать чтоб уместились в экране. Правда я не знаю, может тормозить он от этого больше станет?

Автор: Sheff 10.8.2006, 11:42
OXOTHUK, DirectDraw уже не поддерживается в последних версиях библиотек DirectX, вся его функциональность была перенесена в Direct3D. Ему нужно юзать Direct3D или OpenGL в ORTHO режиме, OpenGL - графическая библиотека, и предназначена для программирования не только 3-х мерной графики.

Автор: OXOTHUK 10.8.2006, 15:35
Sheff, ну ему ж никто не запрещаяет пользоваться DirectDraw 4 или 5. Работать - работает и быстро. А сам он проще.

Автор: Fixin 10.8.2006, 17:49
Цитата(OXOTHUK @  10.8.2006,  15:35 Найти цитируемый пост)
4 или 5
Последний ДД был в 7й версии, это первое. И второе:
Модератор: еще одно сообщение не по теме - закрою топик

Автор: MoZy 10.8.2006, 18:04
Fixin, все по теме  smile  просто топик называется по-другому.

OXOTHUK, я не хочу менять разрешение.

А на счет скорости GDI меня она устраивает, ведь там есть волшебные Get/SetDIBits, что обеспечивает свободу действия в достаточной мере, чтоб свои библиотеки забацать.

Но тема действиетльно закрыта  smile 

Спасибо.

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