本文整理汇总了C++中LPDIRECTDRAWSURFACE::IsLost方法的典型用法代码示例。如果您正苦于以下问题:C++ LPDIRECTDRAWSURFACE::IsLost方法的具体用法?C++ LPDIRECTDRAWSURFACE::IsLost怎么用?C++ LPDIRECTDRAWSURFACE::IsLost使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LPDIRECTDRAWSURFACE
的用法示例。
在下文中一共展示了LPDIRECTDRAWSURFACE::IsLost方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ProcessFrame
void ProcessFrame(){ //process a frame of animation
const int LOGO_DISPLAY_TIME=5500; //duration of logo
const int TITLE_DISPLAY_TIME=20000; //duration of title
static int not_first = 0;
static int last_time = Timer.time();
//check for lost surfaces, eg alt+tab
if(lpPrimary->IsLost()){
RestoreSurfaces(); Redraw();
}
switch(GamePhase){ //what phase are we in?
case LOGO_PHASE: //displaying logo screen
Sleep(100); //surrender time to other processes
if(endphase||Timer.elapsed(PhaseTime,LOGO_DISPLAY_TIME))
change_phase(TITLE_PHASE); //go to title screen
break;
case TITLE_PHASE: //displaying title screen
Sleep(100); //surrender time to other processes
if(endphase||Timer.elapsed(PhaseTime,TITLE_DISPLAY_TIME))
change_phase(MENU_PHASE); //go to menu
break;
case HELP_PHASE: if(endphase)
change_phase(ENEMY_PHASE); //go to menu
case ENEMY_PHASE: if(endphase)
change_phase(MENU_PHASE); //go to menu
case MENU_PHASE: //main menu
Sleep(100); //surrender time to other processes
if(endphase){
if(not_first){
CurrentLevel = 0;
theObjects.reset(0);
}
else{
not_first = 1;
}
change_phase(PLAYING_PHASE); //play game
}
break;
case PLAYING_PHASE: //game engine
if(Timer.elapsed(last_time,35)){
if(mouse_mode){
g_input.Update(); //update the input
ProcessInput(); //process it
}
last_time = Timer.time();
}
ComposeFrame(); //compose a frame in back surface
//PutText(temp.c_str(),lpPrimary);
if(endphase)
change_phase(MENU_PHASE);
if(theObjects.lives_remaining < 0){
change_phase(GAMEOVER_PHASE);
}
if(theObjects.won()) {
//change_phase(MENU_PHASE);
theObjects.reset(++CurrentLevel);
}
break;
case GAMEOVER_PHASE:
Sleep(100);
if(endphase){
change_phase(MENU_PHASE);
}
break;
default: break;
}
} //ProcessFrame
示例2: getScreenBufferHDC
/**
* Use DirectDraw to return an HDC object for invoking GDI functions
* on the pixel buffer (could be a screen back buffer or a
* MIDP off-screen image). The horizontal pitch is assumed to
* be the same as the (width * sizeof(gxj_pixel_type).
*/
HDC getScreenBufferHDC(gxj_pixel_type *buffer, int width, int height) {
#if JWC_WINCE_USE_DIRECT_DRAW
/* pDDS and cachedHDC must both be NULL or both be non-NULL */
static LPDIRECTDRAWSURFACE pDDS = NULL;
static HDC cachedHDC = NULL;
static gxj_pixel_type *cachedBuffer;
DDSURFACEDESC ddsd;
HRESULT hRet;
if (buffer == cachedBuffer && cachedHDC != NULL && !pDDS->IsLost()) {
/* Note: after screen rotation has happened, the pDDS surface may
* be lost, even if it's using a client-defined pixel buffer!
*/
return cachedHDC;
}
if (pDDS != NULL && (buffer != cachedBuffer || pDDS->IsLost())) {
pDDS->ReleaseDC(cachedHDC);
pDDS->Release();
pDDS = NULL;
cachedHDC = NULL;
}
ZeroMemory(&ddsd, sizeof(DDSURFACEDESC));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_LPSURFACE |
DDSD_PITCH | DDSD_PIXELFORMAT | DDSD_CAPS;
ddsd.dwWidth = width;
ddsd.dwHeight= height;
ddsd.lPitch = (LONG)sizeof(gxj_pixel_type) * width;
ddsd.lpSurface = buffer;
ddsd.ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY;
/* Set up the pixel format for 16-bit RGB (5-6-5). */
ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
ddsd.ddpfPixelFormat.dwFlags= DDPF_RGB;
ddsd.ddpfPixelFormat.dwRGBBitCount = 16;
ddsd.ddpfPixelFormat.dwRBitMask = 0x1f << 11;
ddsd.ddpfPixelFormat.dwGBitMask = 0x3f << 5;
ddsd.ddpfPixelFormat.dwBBitMask = 0x1f;
/* Create the surface */
hRet = g_pDD->CreateSurface(&ddsd, &pDDS, NULL);
if (hRet != DD_OK) {
pDDS = NULL;
cachedHDC = NULL;
return NULL;
}
hRet = pDDS->GetDC(&cachedHDC);
if (hRet != DD_OK) {
pDDS->Release();
pDDS = NULL;
cachedHDC = NULL;
return NULL;
}
cachedBuffer = buffer;
return cachedHDC;
#endif /* JWC_WINCE_USE_DIRECT_DRAW */
return NULL;
}
示例3: SimLoop
/********************************************************************
* Function : SimLoop()
* Purpose : Performs a single Simulation Loop iteration. Includes
* drawing.
********************************************************************/
int SimLoop(void)
{
static int nFramesPerSecond = 0;
static int nFramesSinceLastTick;
static DWORD LastTicks = 0;
DWORD Ticks;
HDC hDC;
HFONT hOldFont;
char s[80];
int slen;
DDSURFACEDESC ddsd;
DDBLTFX BltFx;
HRESULT ddreturn;
/* Perform a single step in our world. */
if (StepWorld(bForwardKey, bBackKey, bLeftKey, bRightKey, nState, nGauge))
{
if (lpPrimary->IsLost() == DDERR_SURFACELOST)
lpPrimary->Restore();
/* Clear the backbuffer. */
#if CLEARBCKGRND
BltFx.dwSize = sizeof(BltFx);
BltFx.dwFillColor = 255;
ddreturn = lpBackbuffer->Blt(NULL,
NULL,
NULL,
DDBLT_COLORFILL | DDBLT_WAIT,
&BltFx);
#else
ddreturn = DD_OK;
#endif
if (ddreturn == DD_OK)
{ /* While this is running, prepare
* the drawing. */
if (PrepDrawWorld())
{
/* Lock the surface. */
memset(&ddsd, 0, sizeof(DDSURFACEDESC));
ddsd.dwSize = sizeof(ddsd);
ddreturn = lpBackbuffer->Lock(NULL, &ddsd, DDLOCK_WAIT | DDLOCK_SURFACEMEMORYPTR, NULL);
if (ddreturn == DD_OK)
{
DrawWorld((unsigned char *)ddsd.lpSurface, (int)ddsd.lPitch);
int nX, nY;
static unsigned char dummy;
unsigned char ni;
ni = 0;
for (nY = 0; nY < 16; nY++)
for (nX = 0; nX < 16; nX++)
{
/* Draw a small block at (nX * 3, nY * 3) */
((unsigned char *)ddsd.lpSurface)[(nY * 3 * ddsd.lPitch) + (nX * 3)] = ni;
((unsigned char *)ddsd.lpSurface)[(nY * 3 * ddsd.lPitch) + (nX * 3 + 1)] = ni;
((unsigned char *)ddsd.lpSurface)[((nY * 3 + 1) * ddsd.lPitch) + (nX * 3)] = ni;
((unsigned char *)ddsd.lpSurface)[((nY * 3 + 1) * ddsd.lPitch) + (nX * 3 + 1)] = ni;
ni++;
}
lpBackbuffer->Unlock(NULL);
/* And now write Frames per second. */
/* Increment Frame counter. */
nFramesSinceLastTick++;
/* Get system tick count. */
Ticks = GetTickCount();
/* Update fps value every second. */
if (Ticks > (LastTicks + 1000))
{ nFramesPerSecond = nFramesSinceLastTick;
nFramesSinceLastTick = 0;
LastTicks = Ticks;
}
/* Get a DC to the buffer & write count. */
if (DD_OK == lpBackbuffer->GetDC(&hDC))
{
SetBkMode(hDC, TRANSPARENT);
hOldFont = SelectObject(hDC, AppFont);
/* Build a string for display. */
slen = wsprintf(s, "FPS : %d", nFramesPerSecond);
/* And draw the text. */
SetTextColor(hDC, RGB(0,0,0));
SIZE sz;
GetTextExtentPoint32(hDC, s, slen, &sz);
RECT rc;
rc.top = 0;
rc.left = 16 * 3;
rc.right = 16 * 3 + sz.cx + 10;
rc.bottom = sz.cy + 10;
DrawFrameControl(hDC, &rc, DFC_BUTTON, DFCS_BUTTONPUSH);
TextOut(hDC, 16*3 + 5, 5, s, slen);
SelectObject(hDC, hOldFont);
lpBackbuffer->ReleaseDC(hDC);
}
//.........这里部分代码省略.........