Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > winapi game on vc++


Автор: Serzh 13.12.2003, 02:45
скорее всего глупый вопрос и неоднократно задаваемый.
заранее прошу не посылать. smile.gif

в ресурсах есть BMP'хи - используются, как спрайты
maskblt - выводит их на форму

вобщим и усе. но изоброжение все моргает, по этому надо использовать память и туда прорисовывать все объекты. а потом всю эту память на форму загнать.

вот этого я и не знаю.
заранее спасибо. и если можно исходник или кусок кода.

Автор: Step 14.12.2003, 00:38
тебе надо исползовать проекцию файла в память и юзать функции
CreateFileMapping
MapViewOfFile

Автор: Ars 15.12.2003, 10:53
Нужно создать контекст в памяти с помощью СreateCompatibleDC, выбрать в нем битмапу соответствующего размера, нарисовать все, что нужно , а потом вывести в окно (BitBlt).

Автор: Serzh 15.12.2003, 11:13
мдя...
ни чего не понял, если можно, дайте примерчики.
заранее спасибо.

Автор: Step 15.12.2003, 12:21
Код
HANDLE hFile=::CreateFile(strPathname,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING, FILEATTRIBUTE_NORMAL,NULL);

HANDLE hMap=::CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
LPVOID lpvFile=::MapViewOfFile(hMap,FILE_MAP_READ,0,0,0);
DWORD dwFileSize=::GetFileSize(hFile,NULL);


После этого вы работаете с проекцией файла

Автор: Ars 15.12.2003, 13:06
Step, и чего он с этим добром будет делать? Ему надо рисовать в памяти API-шными функциями. Рисовать можно в контексте. Контекст надо получить с помощью функции CreateCompatibleDC. Полученный контекст нужно снабдить битмапом размера окна, т.к. свой битмап у вновьсозданного контекста очень маленький (1х1). Для этого создаем битмап (любым способом, например, CreateCompatibleBitmap). Выбираем созданный битмап в созданный же контекст (SelectObject). Рисуем в контексте все что нужно обычным способом. Копируем нарисованное из нашего контекста в контекст окна ф-цией BitBlt. И так каждый кадр.

Автор: Step 15.12.2003, 13:15
Ars, зачем ему контекст совместимый, если он может спроецировать ресурс в память и мигание прекратится

Автор: Ars 15.12.2003, 13:26
Цитата
Ars, зачем ему контекст совместимый, если он может спроецировать ресурс в память и мигание прекратится

Ну, я так понимаю, мигает изображение при перерисовывании окна. А ресурс - он и так в памяти...

Автор: knave 15.12.2003, 13:58
Ars Прав. ту надо елать контескт памяти совместимый с конеткстом окна. Все внем рисовать а потом перетаскивать в окно BitBlt.
См CreateCompatibleDC CreateCompatibleBitmap
Работа с контекстом памяти такая же как и с контекстом окна, черзез апи функции. Так что тебе в твоей проге особо и переделывать ничего не придется, просто нужно перенаправить весь вывод не на НDC окна а на НDC твоего контескта памяти. А когда ты выведеш весь кадр тебе надо его при помощи BitBlt перенести (скопировать) в контекст окна.

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