Вроде добавил! Но оно весит внизу и назад не разворачивается. 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);
}