Воскресенье, 10.11.2024, 22:41
Приветствую Вас Гость | RSS
Главная | Как сделать в Direct Draw alt-tab???(fullscreen) - Форум | Регистрация | Вход
Direct3D. Разработка игр
Форма входа
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Как сделать в Direct Draw alt-tab???(fullscreen)
jenikДата: Понедельник, 14.01.2008, 14:59 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 1
Статус: Offline
Как сделать в режиме Direct Draw alt-tab ???
У меня после альт таб не возвращаеться в окно(full screen)!
 
BoosterДата: Пятница, 25.01.2008, 15:39 | Сообщение # 2
Рядовой
Группа: Пользователи
Сообщений: 19
Репутация: 0
Статус: Offline
jenik, в DirectDraw перед тем как делать флип поверхностей (отображение), необходимо проверить поверхности на потерю, и если это произошло то восстановить их.
Примерно так:
Code

//Если потерялась главная поверхность, значит потерялись все, и по-этому достаточно проверить только её.
if (pPrimarySurf->IsLost())
{
  pPrimarySurf->Restore();
  pBackSurf->Restore();
}


Сообщение отредактировал Booster - Пятница, 25.01.2008, 15:41
 
jenikДата: Пятница, 01.02.2008, 23:35 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 1
Статус: Offline
Вроде добавил! Но оно весит внизу и назад не разворачивается.

WORD BIT_MODE=16;//Переменная задания битового режима
//------------------------------------------------------
//переменные для функции CreateSurface(int x, int y)
SurfaceLocation fSurfLoc=BOTH;
//------------------------------------------------------
LPDIRECTDRAW7 pDD;
LPDIRECTDRAWPALETTE pDDPal;
LPDIRECTDRAWPALETTE pDirectDrawPal;
PALETTEENTRY palEntries[256];

LPDDSURFACEDESC2 lpDDSurfaceDesc;
//------------------------------------------------------
//первичная поверхность
LPDIRECTDRAWSURFACE7 pPrimarySurface;
//своя вторичная поверхность
LPDIRECTDRAWSURFACE7 buffer;
//Массив поверхностей
LPDIRECTDRAWSURFACE7 image[image_max];
//счетчик поверхностей
int image_num=0;

//------------------------------------------------------
//Функция создает первичный объект DirectDrawSurface
//с главными поверхностями
bool CreateMainSurfaces()
{
//Объявление необходимых для многих функций DirectDraw
//структур и переменных
DDSURFACEDESC2 ddSurfaceDesc;
DDSCAPS2 ddsCaps;
HRESULT hRet;

//Отчистка структуры от "мусора" и установка поля ее размера
ZeroMemory(&ddSurfaceDesc, sizeof(ddSurfaceDesc));
ddSurfaceDesc.dwSize=sizeof(ddSurfaceDesc);

//Установка необходимых полей структуры
ddSurfaceDesc.dwFlags=DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddSurfaceDesc.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
ddSurfaceDesc.dwBackBufferCount=1;

//Создание поверхности
hRet=pDD->CreateSurface(&ddSurfaceDesc, &pPrimarySurface, NULL);
if (hRet!=DD_OK)
return (false);

//Создать свой вторичный буфер
buffer=CreateSurface(SizeWindowX,SizeWindowY);
if(buffer==NULL)return (false);

//Если цветовой режим 8 бит - создать палитру
if(BIT_MODE==8)
{
//Создание палитры DirectDraw
pDDPal=CreateDirectDrawPalette(pDD,"data\\bk.bmp");
if (pDDPal==NULL)
{
ErrorHandle(hWnd, "CreateDirectDrawPalette");
return (false);
}
}
return true;
}
void Flip()
{
RECT rPic;
if (pPrimarySurface->IsLost())
{
//Уничтожаем интерфейс первичной поверхности
pPrimarySurface->Restore();;
}
//Проверка на существование внеэкранной поверхности
if (buffer->IsLost())
{
//Уничтожение буфера
buffer->Restore();
}
//Проверка на существование интерфейса палитры
//if(pDDPal->IsLost())
//{
// //Уничтожение интерфейса палитры
// pDDPal->Restore();
//}
//Уничтожение поверхностей
for(int i=0;i<image_num;i++)
{
if(image[i]->IsLost())
{
image[i]->Restore();
}
}
//Установка размеров копируемого блока данных
SetRect(&rPic, 0, 0, SizeWindowX, SizeWindowY);
//печать на первичную поверхность
pPrimarySurface->BltFast(0,0, buffer, &rPic,DDBLTFAST_WAIT);
}[/code]

Добавлено (01.02.2008, 23:35)
---------------------------------------------
Может что то нужно добавить в сообщения?

Code
bool ProcessMessages()
{
  MSG         msg;
  while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
  return  false;
};
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
//----------------------------------------------
HWND hWnd;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmd,int nCmdShow)
{
  WNDCLASS WndClass;

  WndClass.style=CS_HREDRAW|CS_VREDRAW;//|CS_DBLCLKS;
  WndClass.lpfnWndProc=WndProc;
  WndClass.cbClsExtra=0;
  WndClass.cbWndExtra=0;
  WndClass.hInstance=hInstance;
  WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
  WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
  WndClass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
  WndClass.lpszMenuName="2d tab graped";
  WndClass.lpszClassName="2d tab graped";

  if(!RegisterClass(&WndClass))return (0);

  hWnd=CreateWindow("2d tab graped",
   "graph",
   WS_POPUP,
   0,//Координаты
   0,
   800,600,NULL,NULL,hInstance,NULL);

  if(!hWnd)return NULL;

  ShowWindow(hWnd,nCmdShow);
  UpdateWindow(hWnd);

  //    ShowCursor(false);//убрать системный курсор
  //------------------------------
  SizeWindowX=800;SizeWindowY=600;//задание размеров экрана
  if (!InitDirectDraw (hWnd,16))//иницализация DirectDraw (рассматриваем только 16 бит)
  {
   ErrorHandle(hWnd, "InitDirectDraw");
   return 0;
  }
  if (!InitDirectSound(hWnd))//иницализация DirectSound
  {
   ErrorHandle(hWnd, "InitDirectSound");
   return(0);
  }
  //Инициализировать цвета (всегда вызывать после инициализации DirectDraw)
  Init_Colors();
  //шаг экрана - для вывода примитивов
  lPitch=SizeWindowX;
  graph_main();
  PostMessage(hWnd, WM_CLOSE,0, 0L);
  return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
  switch(message)//обработка событий
  {
  case WM_CHAR:
   key=wParam;
   keypress=true;
   return 0;
  case WM_KEYDOWN:
   key=wParam;
   keypress=true;
   return 0;
  case WM_MOUSEMOVE:
   is_delay_over==true;
   cur_x=LOWORD(lParam);
   cur_y=HIWORD(lParam);
   return 0;
  case WM_LBUTTONDOWN:
   lbutton=true;
   pointlx=cur_x;
   pointly=cur_y;
   //if(key_mode==0)
   //{
   key_mode=1;
   //}
   return 0;
  case WM_LBUTTONUP:
   lbutton=false;
   pointlUx=cur_x;
   pointlUy=cur_y;
   if(key_mode==1)
   {
    key_mode=2;
   }
   return 0;
  case WM_DESTROY:
   PostQuitMessage(0);
   return 0;
  }
  return DefWindowProc(hWnd,message,wParam,lParam);
}
 
BoosterДата: Суббота, 02.02.2008, 12:51 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 19
Репутация: 0
Статус: Offline
Наверно желательно, и перед блокированием поверхности тоже проверить на потерю. Скорее всего это именно из за того что не восстанавливаются поверхности. Если хочешь можеш переслать проект мне на почту, igwasm@rambler.ru

Сообщение отредактировал Booster - Суббота, 02.02.2008, 13:14
 
jenikДата: Воскресенье, 03.02.2008, 00:31 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 3
Репутация: 1
Статус: Offline
вот нашел шаблон...
 
  • Страница 1 из 1
  • 1
Поиск:


Doom†Cross Software ® 2024
Создать бесплатный сайт с uCoz