CBitmap membm, earthbm;
CDC memdc, earthdc;
memdc.CreateCompatibleDC(pDC);
membm.CreateCompatibleBitmap(pDC,X,Y);
memdc.SelectObject(membm);
earthdc.CreateCompatibleDC(pDC);
// earthbm.CreateCompatibleBitmap(pDC,X,Y);
earthbm.LoadBitmap(IDB_BITMAP1);
earthdc.SelectObject(earthbm);
earthdc.PatBlt(X,Y,50,50,WHITENESS);
memdc.BitBlt(X,Y,50,50,&earthdc,0,0,SRCCOPY);
pDC->BitBlt(X,Y,50,50,&memdc,0,0,SRCCOPY);
Врашение картинок !!!
Уважаемые программисты у меня вот кокой вопрос. Вот моя программа [ATTACH]2712[/ATTACH], как вы можите заметить в этой программе шарик врашается вокруг другова шарика !!!
Вопрос таков
1. Как зделать чтобы вместо шарика врашалась картинка (например земли)
2. Чтобы картинки не мигали
[COLOR="#ff0000"][RIGHT]Зарание спасибо !!! :rolleyes: [/RIGHT][/COLOR]
Пожалуйста помогите хоть чемто !!! :cool:
Ищите что-нибуть про двойную буферизацию и мировую систему координат. Первое применяется для устранения мигания, второе для вращения картинок.
Ладно перефразирую вопрос: Как поместить картинку .bmp на экран Single Document в VS 6.0 ????
Заюзать библиотеку. Например freeimage. Или юзать гді BitBlt
А можно поподробнее о BitBlt. Или примерчик ?
Цитата: ViToBrother
А можно поподробнее о BitBlt. Или примерчик ?
Пожалуйста напишите тот кусок программы как поместить эту ([ATTACH]2722[/ATTACH]) картинку (.bmp) на экран, прошу очень надо !!!
[COLOR="Red"][CENTER]Прошу !!! Очень нужна ваша помощь !!![/CENTER][/COLOR]
http://www.firststeps.ru/
Если самостоятельно не сможешь с одной функцией разобраться, то тебе никто помочь не сможет.
Кроме того: тебе лучше использовать не BitBlt, а TransparentBlt.
Она отличается тем, что ты сможешь вывести битмап с прозрачностью и белого цвета (или какой тебе еще понадобится) по краям не будет виден.
Читай тут:
Если самостоятельно не сможешь с одной функцией разобраться, то тебе никто помочь не сможет.
Кроме того: тебе лучше использовать не BitBlt, а TransparentBlt.
Она отличается тем, что ты сможешь вывести битмап с прозрачностью и белого цвета (или какой тебе еще понадобится) по краям не будет виден.
Цитата: Tdr
Читай тут: http://www.firststeps.ru/
Если самостоятельно не сможешь с одной функцией разобраться, то тебе никто помочь не сможет.
Кроме того: тебе лучше использовать не BitBlt, а TransparentBlt.
Она отличается тем, что ты сможешь вывести битмап с прозрачностью и белого цвета (или какой тебе еще понадобится) по краям не будет виден.
Если самостоятельно не сможешь с одной функцией разобраться, то тебе никто помочь не сможет.
Кроме того: тебе лучше использовать не BitBlt, а TransparentBlt.
Она отличается тем, что ты сможешь вывести битмап с прозрачностью и белого цвета (или какой тебе еще понадобится) по краям не будет виден.
[COLOR="Red"]Огромное спасибо за помош !!![/COLOR] Я разместил картинку на Экран, но она по прежднему мигает как можно избавется от мигание ?
читай про двойную буферизацию
Цитата: Тень Пса
читай про двойную буферизацию
А где можно прочитать про двойную буферизацию ? Я вот а Гоогле поискал но не нашол то что надо( примерчики на Visual C++) !!!
Вот мои попытки двойной буферизации (в коментариях) правда нечего не вышло ! Может ыв поймёте в чём дело !!! [ATTACH]2729[/ATTACH]
А ты в гугле слова "двойная буферизация" без ошибок написал? ;)
Это можно реализовать так:
Создаешь битмап в памяти.
Выбираешь его в еще один контекст устройства, совместимый с контекстом твоего приложения.
Всю отрисовку производишь в этот новый контекст.
После отрисовки при помощи BitBlt выводишь содержимое битмапа на экран.
Цитата: Washington
А ты в гугле слова "двойная буферизация" без ошибок написал? ;)
Xo-xo-xo :(
Цитата: Tdr
Раз уж смог нарисовать, то с двойным буфером сложностей не возникнет.
Это можно реализовать так:
Создаешь битмап в памяти.
Выбираешь его в еще один контекст устройства, совместимый с контекстом твоего приложения.
Всю отрисовку производишь в этот новый контекст.
После отрисовки при помощи BitBlt выводишь содержимое битмапа на экран.
Это можно реализовать так:
Создаешь битмап в памяти.
Выбираешь его в еще один контекст устройства, совместимый с контекстом твоего приложения.
Всю отрисовку производишь в этот новый контекст.
После отрисовки при помощи BitBlt выводишь содержимое битмапа на экран.
Вот что я зделал:
Код:
Но после этого по экрану стал двигатся куб :eek: ??? [ATTACH]2730[/ATTACH]
Код:
CBitmap membm, earthbm; // Создаешь битмап в памяти.
CDC memdc, earthdc; // контекст устройства, совместимый с контекстом твоего приложения.
RECT re;
GetClientRect(&re);
memdc.CreateCompatibleDC(pDC);
membm.CreateCompatibleBitmap(pDC,re.right-re.left,re.bottom-re.top);
memdc.SelectObject(membm);
earthdc.CreateCompatibleDC(pDC);
earthbm.LoadBitmap(IDB_BITMAP1);
earthdc.SelectObject(earthbm);
CBrush br(RGB(255, 255, 255));
memdc.FillRect(&re, &br);
memdc.TransparentBlt(X,Y,50,50,&earthdc,0,0,50,50,RGB(255, 255, 255));
pDC->BitBlt(0,0,re.right-re.left,re.bottom-re.top,&memdc,0,0,SRCCOPY);
CDC memdc, earthdc; // контекст устройства, совместимый с контекстом твоего приложения.
RECT re;
GetClientRect(&re);
memdc.CreateCompatibleDC(pDC);
membm.CreateCompatibleBitmap(pDC,re.right-re.left,re.bottom-re.top);
memdc.SelectObject(membm);
earthdc.CreateCompatibleDC(pDC);
earthbm.LoadBitmap(IDB_BITMAP1);
earthdc.SelectObject(earthbm);
CBrush br(RGB(255, 255, 255));
memdc.FillRect(&re, &br);
memdc.TransparentBlt(X,Y,50,50,&earthdc,0,0,50,50,RGB(255, 255, 255));
pDC->BitBlt(0,0,re.right-re.left,re.bottom-re.top,&memdc,0,0,SRCCOPY);
Огромное спасибо Tdr, с вашей помощю у меня всё получилось !!! Но у меня есть вопрос почему мой вариант не работал и в вашем варианте мне пришлось изменить TransparentBlt на BitBlt потому что с TransparentBlt были какиета проблемы возможно потому что у меня стоит VS6 !
Попробуйте изменить эту строку - CBrush br(RGB(255, 255, 255)); и прописать другой цвет, сразу появится проблема прозрачности.
Ваш вариант не работал по двум причинам:
1. Черный квадрат - по умолчанию битмап закрашен черным.
2.
Код:
membm.CreateCompatibleBitmap(pDC,X,Y);
...
memdc.BitBlt(X,Y,50,50,&earthdc,0,0,SRCCOPY);
...
memdc.BitBlt(X,Y,50,50,&earthdc,0,0,SRCCOPY);
Размер битмапа от 0*0 до X*Y, а вывод из earthdc идет в координаты от X*Y до (X+50)*(Y+50), т.е. картинка Земли в битмап не попадает.