www.pudn.com > CDX.rar > ex11.cpp
///////////////////////////////////////////////////////////////////////////////////////////// // CDX example 11 - Fullscreen ISO map scrolling & keyboard input // You must link to cdx.lib, ddraw.lib, dinput and dxguid ///////////////////////////////////////////////////////////////////////////////////////////// #include#include #include #include #define CDXINCLUDEALL #include #define NAME "CDXExample11" #define TITLE "CDX Example 11" CDXScreen* Screen; // The screen object, every program must have one CDXTile* Tiles; // The background tiles CDXIsoMap* Map; // The scrolling map object BOOL bActive = TRUE; // Is the program running? char Bitmap[] = "TILES.BMP"; ///////////////////////////////////////////////////////////////////////////////////////////// // FiniApp - Destroy the CDX objects ///////////////////////////////////////////////////////////////////////////////////////////// void FiniApp(void) { delete Map; delete Tiles; delete Screen; } ///////////////////////////////////////////////////////////////////////////////////////////// // WinProc ///////////////////////////////////////////////////////////////////////////////////////////// long PASCAL WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_ACTIVATEAPP: bActive = wParam; break; case WM_KEYDOWN: switch(wParam) { case VK_ESCAPE: PostMessage(hWnd, WM_CLOSE, 0, 0); break; } break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc(hWnd, message, wParam, lParam); } ///////////////////////////////////////////////////////////////////////////////////////////// // InitApp - Create the window and the CDX objects ///////////////////////////////////////////////////////////////////////////////////////////// BOOL InitApp(HINSTANCE hInst, int nCmdShow) { HWND hWnd; WNDCLASS WndClass; WndClass.style = CS_HREDRAW | CS_VREDRAW; WndClass.lpfnWndProc = WinProc; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = hInst; WndClass.hIcon = LoadIcon(0, IDI_APPLICATION); WndClass.hCursor = LoadCursor(0, IDC_ARROW); WndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); WndClass.lpszMenuName = 0; WndClass.lpszClassName = NAME; RegisterClass(&WndClass); hWnd = CreateWindowEx( WS_EX_TOPMOST, NAME, TITLE, WS_POPUP, 0,0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), NULL, NULL, hInst, NULL); if(!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // Create the CDXSreen object Screen = new CDXScreen(); // set the video mode 640x480x8 if( FAILED(Screen->CreateFullScreen( hWnd , 640 , 480 , 8 ) ) ) CDXError( Screen , "could not set video mode 640x480x8" ); Screen->LoadPalette(Bitmap); // Load the tiles Tiles = new CDXTile(); if( Tiles->Create(Screen, Bitmap, 64, 32, 0) == FALSE ) CDXError( Screen , "could not load tiles" ); // set the top left pixel in tiles bitmap as transparent color Tiles->SetColorKey(); // Create and load the map Map = new CDXIsoMap(Tiles, Screen); Map->Create(400, 400, 1); srand((unsigned int)time(NULL)); for(int row=0; row<400; row++) { for(int col=0; col<400; col++) { Map->SetTile(col, row, rand()%4+1); } } Map->MoveTo(0,0); return TRUE; } ///////////////////////////////////////////////////////////////////////////////////////////// // WinMain ///////////////////////////////////////////////////////////////////////////////////////////// int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) { MSG msg; if(!InitApp(hInst, nCmdShow)) return FALSE; while(1) { if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)) { if(!GetMessage(&msg, NULL, 0, 0 )) return msg.wParam; TranslateMessage(&msg); DispatchMessage(&msg); } else if(bActive) { if(GetAsyncKeyState(VK_UP)) Map->ScrollUp(1); if(GetAsyncKeyState(VK_DOWN)) Map->ScrollDown(1); if(GetAsyncKeyState(VK_LEFT)) Map->ScrollLeft(1); if(GetAsyncKeyState(VK_RIGHT)) Map->ScrollRight(1); Map->DrawTrans(Screen->GetBack()); // Draw the map to the back buffer Screen->Flip(); // Then display it } else WaitMessage(); } }