static void DrawMN(byte *p1, byte *p2, void *bg, int sel) { PutBitmap(0, 0, bg, 800, 140); PutBitmapNZ(80, 100+0, p1, 640, 150); PutBitmap(80, 250, ((sel == 0) ? p2 : p1) + 640 * 150, 640, 74); PutBitmap(80, 324, ((sel == 1) ? p2 : p1) + 640 * 224, 640, 80); PutBitmap(80, 404, ((sel == 2) ? p2 : p1) + 640 * 304, 640, 76); PutBitmap(80, 480, ((sel == 3) ? p2 : p1) + 640 * 380, 640, 100); }
bool CDDB::PutBitmap( int x, int y, UINT nIDResource, int xSrc, int ySrc, int dxSrc, int dySrc, int width, int height, DWORD dwRop, int alpha) { // Get bitmap resource CDC NewDC; NewDC.CreateCompatibleDC( &m_DC); CBitmap NewBmp; if ( !NewBmp.LoadBitmap( nIDResource)) return false; // Fail CBitmap *pOldBmp = (CBitmap *)NewDC.SelectObject( &NewBmp); BITMAP bmpInfo; NewBmp.GetBitmap(&bmpInfo); // Put bitmap bool bRetVal = PutBitmap( x, y, &NewDC, xSrc, ySrc, dxSrc, dySrc, width, height, dwRop, alpha); NewDC.SelectObject( pOldBmp); return bRetVal; }
/************************************************************* PutBitmap desc : DDB에 지정한 비트맵 리소스의 일부 영역을 출력한다. arg : x, y = DDB에 이미지를 출력할 시작 좌표 nIDResource = 비트맵 리소스 ID xSrc, ySrc = Source DC에서 이미지를 가져올 시작 좌표 입력 dxSrc, dySrc = Source DC에서 이미지를 가져올 크기 혹은 끝 좌표 width, height = 가져온 이미지를 출력하기 위한 크기 dwRop = 래스터 오퍼레이션(TRANSPARENT=투명색 처리, SRCCOPY, SRCAND, SRCOR...) alpha = 투명값 ret : true(=성공) or false(=실패) ex : PutBitmap( 200, 100, IDB_BITMAP, 300, 400, 100, 100, 200, 200, SRCCOPY, 255); **************************************************************/ bool CDDB::PutBitmap( int x, int y, UINT nIDResource, int xSrc, int ySrc, int dxSrc, int dySrc, DWORD dwRop, int alpha) { return PutBitmap( x, y, nIDResource, xSrc, ySrc, dxSrc, dySrc, dxSrc, dySrc, dwRop, alpha); }
/************************************************************* PutBitmap desc : DDB의 지정한 위치에 다른 DDB로부터 이미지 일부 영역을 복사한다. arg : x, y = 출력을 시작할 위치 좌표 입력 *pDC = 출력할 이미지를 가져올 DC 포인터 입력 xSrc, ySrc = Source DC에서 이미지를 가져올 시작 좌표 입력 dxSrc, dySrc = Source DC에서 이미지를 가져올 크기 혹은 끝 좌표 width, height = 가져온 이미지를 출력하기 위한 크기 dwRop = 래스터 오퍼레이션(TRANSPARENT=투명색 처리, SRCCOPY, SRCAND, SRCOR...) alpha = 투명값 ret : true(=성공) or false(=실패) ex : PutBitmap( 100, 100, GetDC(), 200, 200, 300, 300, SRCCOPY, 255); **************************************************************/ bool CDDB::PutBitmap( int x, int y, CDC *pDC, int xSrc, int ySrc, int dxSrc, int dySrc, DWORD dwRop, int alpha) { return PutBitmap( x, y, pDC, xSrc, ySrc, dxSrc, dySrc, dxSrc, dySrc, dwRop, alpha); }
static void DrawFlash(TMutationHeader *Mut, void *Buffer, int FromY, int ToY) { if (Flash1st) { PlaySample(FlashSnd, 8, 32, 128); Flash1st = FALSE; } PutBitmap(0, FlashPos, Buffer, Mut->ResolutionX, Mut->ResolutionY); }
void ShowCredits() { char *buf; char line[200]; void *ptr, *ptr2; char *c; int i, curln, lastchar; int oldvol = MusicVolume; TEvent e; SetVolume(EffectsVolume, SpeechVolume, 64); MouseHide(); ClearScr(); PlayMusic("solution.s3m"); do {GetEvent(&e);} while (e.What != evNothing); e.What = evNothing; ptr = memalloc(RES_X * RES_Y); memset(ptr, 0, 800*600); ptr2 = GraphicsDF->get("mmnulogo"); memcpy(ptr, ptr2, 800 * 140); memfree(ptr2); buf = (char*) TextsDF->get("credits"); ptr2 = memalloc(RES_X * RES_Y); memcpy(ptr2, ptr, RES_X * RES_Y); DrawPicture(ptr); for (curln = 520; TRUE; curln -= 1) { i = 0; line[0] = 0; lastchar = 0; for (c = buf; *c != 0; c++) { if (*c == '\n') { line[lastchar] = 0; if (strcmp(line, "END") == 0) break; i++; if (strlen(line) == 0) continue; if ((curln + 20 * i > 60) && (curln + 20 * i < 540)) PutStr(ptr, 800, 400 - GetStrWidth(line+1, NormalFont)/2, curln + 20 * i, line+1, NormalFont, (line[0] == '*') ? 9/*red*/ : 2/*white*/, 0); line[0] = 0; lastchar = 0; } else line[lastchar++] = *c; } PutBitmap(0, 220, ((char*)ptr) + 220 * 800, 800, 300); memcpy(ptr, ptr2, 800*600); SDL_Delay(20); GetEvent(&e); if ((e.What == evKeyDown) || (e.What == evMouseDown)) break; } memfree(ptr); memfree(ptr2); memfree(buf); MouseShow(); ClearScr(); SetVolume(EffectsVolume, SpeechVolume, oldvol); }