Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2012, 15:30   #1
Sylvos
 
Регистрация: 23.02.2012
Сообщений: 6
По умолчанию Как сделать фон спрайта прозрачным?

Есть спрайты в формате .BMP , я создаю дочернее окно с помощью
Код:
hTank=CreateWindowEx(0,L"Static",L"",WS_CHILD|WS_VISIBLE|SS_BITMAP,iX,iY,28,28,hMain,NULL,GetModuleHandle(0),NULL);
Загружаю в него спрайт "Танк на черном фоне"
Код:
hBmp[i]=LoadBitmap(GetModuleHandle(0),MAKEINTRESOURCE(IDB_BITMAP13+i));
SendMessage(hTank,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hBmp[0]);
Как сделать черный фон прозрачным?
Вложения
Тип файла: rar TANK.rar (545.0 Кб, 15 просмотров)
Sylvos вне форума Ответить с цитированием
Старый 19.03.2012, 16:30   #2
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

LoadImage ищите в msdn
microbit вне форума Ответить с цитированием
Старый 19.03.2012, 16:59   #3
Sylvos
 
Регистрация: 23.02.2012
Сообщений: 6
По умолчанию

Только что попробовал, не получается.
Код:
HANDLE hBmp;
hBmp=LoadImage(GetModuleHandle(0),MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,28,28,LR_LOADTRANSPARENT);
SendMessage(hTank,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hBmp);
Или я что то делаю не правильно?
Sylvos вне форума Ответить с цитированием
Старый 21.03.2012, 18:33   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Или я что то делаю не правильно?
Все правильно делаете, только вот незадача:
LoadImage с флагом LR_LOADTRANSPARENT работает с изображением с глубиной цвета не больше 8 бит на пиксель. Хотите больше надо маску, или альфа-канал.
EUGY вне форума Ответить с цитированием
Старый 24.03.2012, 00:03   #5
Sylvos
 
Регистрация: 23.02.2012
Сообщений: 6
По умолчанию

Как правильно очистить буфер?
Код:
HDC Buf_HDC = CreateCompatibleDC(GetDC(hwnd));
HBITMAP hBuffer = CreateBitmap(800,600,1,32,NULL);
SelectObject(Buf_HDC ,Buffer);
while(true)
{
  //Чтото вывели в буфер Buf_HDC 
  BitBlt(GetDC(hwdn),0,0,800,600,Buf_HDC ,0,0,SRCCOPY);//Вывели буфер Buf_HDC  в окно
  //Как теперь правильно очистить буфер?
}
Sylvos вне форума Ответить с цитированием
Старый 24.03.2012, 00:35   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Как-то так.
Код:
	HWND hwnd =???;

	HDC deskDC = GetDC(NULL);
	HDC testDC = GetDC(hwnd);
	HDC Buf_HDC = CreateCompatibleDC(deskDC);
	HBITMAP hBuffer = CreateBitmap(800,600,1,32, NULL);
	HBITMAP hprv = (HBITMAP) SelectObject(Buf_HDC,  hBuffer);
	//.. TODO : Что-то нарисовали в буфере

	//Вывели буфер Buf_HDC  в окно
	BitBlt(testDC,0,0,800,600,Buf_HDC,0,0,SRCCOPY);
	
	//Освободить ресурсы
	SelectObject(Buf_HDC, hprv);
	DeleteObject(hBuffer);
	DeleteDC(Buf_HDC);
	ReleaseDC(hwnd, testDC);
	ReleaseDC(NULL, deskDC);
EUGY вне форума Ответить с цитированием
Старый 24.03.2012, 01:17   #7
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

Код:
PatBlt(Buf_HDC,0,0,800,600,WHITENESS);
заполнит белым цветом
microbit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать что-бы фон оставался на месте??? moshkin_ura HTML и CSS 1 11.01.2012 10:38
Как сделать фон компонента Image прозрачным Arassir Мультимедиа в Delphi 3 02.01.2011 19:16
Как сделать *.ico с прозрачным фоном? spamer Свободное общение 5 05.12.2009 16:00
Как сделать фон в WORD (офис 2007) katlis Microsoft Office Word 2 09.09.2009 23:48
как сделать Memo прозрачным 1234 Общие вопросы Delphi 1 21.02.2008 16:38