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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2010, 23:51   #1
dueram
Пользователь
 
Регистрация: 24.11.2009
Сообщений: 12
По умолчанию DirectDraw, взять hdc поверхности

Здравствуйте, пишу программу с directdraw7.
Мне нужно рисовать на мониторе второй курсор, и, как мне кажется, для этого можно использовать оверлей поверхность. Перед тем как оверлей отображать, в него, естественно, нужно загрузить изображение курсора, а для этого нужен диси этого самого оверлея. Но попытка его взять приводит к hresult'у 0x88760249 (Error: Problem getting extra display info(Can't create DC)).

Как же все-таки его взять?
Благодарю за любые предложения.

Код:
DDSURFACEDESC2 ddsd2;
memset(&ddsd2, 0, sizeof(DDSURFACEDESC2));
ddsd2.dwSize = sizeof(DDSURFACEDESC2);
ddsd2.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | DDSD_PIXELFORMAT;
ddsd2.dwWidth = 32;
ddsd2.dwHeight = 32;
ddsd2.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;;
DDPIXELFORMAT ddpf = {sizeof(DDPIXELFORMAT), DDPF_FOURCC, MAKEFOURCC('U','Y','V','Y'),0,0,0,0,0};
ddsd2.ddpfPixelFormat = ddpf;
	
if(lpDD->CreateSurface(&ddsd2, &lpDDSSprite, NULL) != DD_OK)
		{DDraw7Release();return 0;}
HDC shdc;
if(lpDDSSprite->GetDC(&shdc) != DD_OK)
		{Код срабатывае(((};
Upd. если dwCaps - не DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY, а DDSCAPS_PRIMARYSURFACE, проблем нет

Последний раз редактировалось dueram; 08.01.2010 в 00:04.
dueram вне форума Ответить с цитированием
Старый 08.01.2010, 01:04   #2
dueram
Пользователь
 
Регистрация: 24.11.2009
Сообщений: 12
По умолчанию

Видимо, проблема тут в цветовой схеме FOURCC, т.к. DC работает в RGB. До кучи еще RGB оверлеи видеокартой не поддерживаются((
Придется что-то другое придумывать.
dueram вне форума Ответить с цитированием
Старый 08.01.2010, 02:37   #3
dueram
Пользователь
 
Регистрация: 24.11.2009
Сообщений: 12
По умолчанию

Продолжаю диалог с собой

Это ж надо было 2 дня угрохать на разбиралово с дидрой и оглом, чтобы нарисовать курсор))

В итоге сделал курсор как окно прозрачное, т.к. GDI тормозной слишком. Ниже код, отжор ресурсов нулевой:

Код:
HWND hcurs;
HICON hmIcon;

void MoveCursor(int x, int y)
{
	SetWindowPos(hcurs, NULL, x, y, 32, 32, SWP_NOREDRAW|SWP_NOSIZE|SWP_NOREPOSITION);
}

LRESULT CALLBACK Cursproc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	switch(message)
	{
	case WM_CREATE:
		hmIcon = LoadCursor(NULL, IDC_ARROW);
		break;
	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);
		DrawIconEx(hdc, x, y, hmIcon, 0,0,0,NULL,DI_NORMAL | DI_COMPAT | DI_DEFAULTSIZE);
		EndPaint(hwnd, &ps);
	break;
	}
	return DefWindowProc(hwnd, message, wParam, lParam);
}

HWND CreateCurs()
{
	HWND hwnd;
	WNDCLASSEX wcex;
	wcex.cbSize = sizeof(WNDCLASSEX);
	wcex.style = CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc = Cursproc;
	wcex.cbClsExtra = 0;
	wcex.cbWndExtra = 0;
	wcex.hInstance = happInst;
	wcex.hIcon = LoadIcon(happInst, MAKEINTRESOURCE(IDI_APPLICATION));
	wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(0,0,3));
	wcex.lpszMenuName = NULL;
	wcex.lpszClassName = L"lalala";
	wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
	RegisterClassEx(&wcex);
	hwnd = CreateWindowEx(NULL,
		wcex.lpszClassName,
		NULL,
		WS_POPUP,
		100,
		100,
		32,
		32,
		hGamewnd,NULL,happInst,NULL);
	SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
	SetLayeredWindowAttributes(hwnd, RGB(0,0,3), 100, LWA_COLORKEY);
	ShowWindow(hwnd, SW_SHOW);
	UpdateWindow(hwnd);
	return hwnd;
}
dueram вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pixels[][] или GetPixel(hdc,x,y) Nick0 C++ Builder 5 12.12.2009 16:09
создание спрайтовой поверхности DirectDraw sashonk Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 26.10.2009 12:12
Создать HDC с определенным размером -XAKEP- Общие вопросы C/C++ 1 07.07.2009 15:33
CreateCompatibleDC(NULL) - для какого HDC создаётся compatible DC butterflight Win Api 9 16.06.2009 21:19
DirectDraw Kostia Gamedev - cоздание игр: Unity, OpenGL, DirectX 29 15.04.2008 22:35