Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

DirectDraw/DDUtil

From ZeroWiki
Revision as of 14:01, 26 March 2026 by Maintenance script (talk | contribs) (Repair MoniWiki formatting after migration)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

개요

TheWarOfGenesis2R페이지의 개설에 따라 사용법을 모읍니다.

DDUtil

DXSDK에서 제공하는 함수 모음집.(ㅡ.ㅡa) (Direct Draw 의 Wrapping Class 가 되겠지요.)

생각보다 초기화하기 까다로운 DX의 사용을 그나마 편하게 해주는 것들이다

DDUtil안에는 두개의 클래스가 있다

CDisplay

DirectDraw의 생성과 Surface와 연결을 담당하는 Class CDisplay의 함수에는 다음과 같은 것이 있다.

  1. 초기화
CreateFullScreenDisplay(HWND hWnd, DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) 
DirectDraw 장치를 풀스크린 모드로 생성한다.
  • hWnd : 현재 윈도우의 핸들
  • dwWidth : 생성할 객체의 넓이
  • dwHeight : 생성할 객체의 높이
  • dwBPP : 생성할 객체의 색상수 (8, 16, 24, 32..)
CreateWindowedDisplay HWND hWnd, DWORD dwWidth, DWORD dwHeight) 
위와 같은 일을 하지만 창모드로 생성한다. 색상수가 없는 것은 윈도우 바탕화면의 색상 수를 따라가기 때문이다.
  1. Surface생성
서피스는 그림을 담는 그릇이다.
CreateSurface( CSurface **ppSurface, DWORD dwWidth, DWORD dwHeight) 
보통의 서피스를 생성한다.
CreateSurfaceFromBitmap(CSurface** ppSurface, TCHAR* strBMP, DWORD dwDesiredWidth, DWORD dwDesiredHeight) 
비트맵으로부터 서피스를 생성한다.
  • strBMP : 비트맵 파일의 파일명을 넣는다.
  • 넓이와 높이는 비트맵의 크기를 넣어주면 된다.
CreateSurfaceFromText( CSurface** ppSurface, HFONT hFont, TCHAR* strText, COLORREF crBackground, COLORREF crForeground) 
문자열로부터 서피스를 생성한다.
  1. 팔레트
색상수가 적은 비트맵의 경우에는 팔레트를 지정해 주어야 한다.
CreatePaletteFromBitmap( LPDIRECTDRAWPALETTE *ppPalette, const TCHAR *strBMP)
특정한 비트맵 파일로부터 팔레트를 얻어온다.
SetPalette( LPDIRECTDRAWPALETTE pPalette)
CDisplay 에 특정한 팔레트를 세팅한다.
  1. 서피스(그림)의 출력
서피스의 그림을 백 버퍼로 출력한다.
ShowBitmap(HBITMAP hbm, LPDIRECTDRAWPALETTE pPalette)
HBITMAP형의 비트맵을 특정한 팔레트를 통해 화면에 출력한다. 
당연히 전에 있던 그림은 지워진다. ColorKeyBlt(DWORD x, DWORD y, LPDIRECTDRAWSURFACE7 pdds, RECT *prc) 컬러키(투명색)를 가진 채 화면에 출력한다. prc는 사용하지 않는다. Blt(DWORD x, DWORD y, LPDIRECTDRAWSURFACE7 pdds, RECT *prc, DWORD dwFlags) 컬러키를 뺀채 화면에 출력한다. 만약 dwFlags에 DDBLTFAST_SRCCOLORKEY를 넣어준다면 ColorKeyBlt와 같은 효과를 낸다.
역시 prc는 사용하지 않는다. Blt(DWORD x, DWORD y, CSurface *pSurface, RECT *prc) CSurface형을 화면에 출력한다. prc는 사용하지 않는다.
  1. 화면의 갱신
위의 Blt함수들은 백 버퍼에 출력하는 함수들이다. 모든 내용을 백 버퍼에 출력했으면 다음 함수들을 사용하자
Present()
백 버퍼에 출력되어있는 내용을 현재 화면으로 출력한다. 화면을 모두 완성한 후에 사용한다.
Clear()
백 버퍼의 내용을 모두 지운다.
UpdateBounds()
CDislpay의 멤버 m_rcWindow를 갱신한다. 저 CRect형 변수에는 윈도우의 크기가 들어있다.



CSurface

Surface의 생성과 관리를 담당하는 Class

  1. 초기화
 CSurface *surface = NULL;
  1. 컬러키 세팅
 surface->SetColorKey(DWORD dwColorKey);
컬러키(투명색)으로 사용할 색을 COLORREF (RGB) 형에 맞추어서 집어넣으면 된다. 
대개 잘 쓰이지 않는 색을 사용한다.
  1. 비트맵으로 surface를 만든 경우가 아니라면 surface에 직접 그림을 그려 넣어줄 수 있다.
 surface->DrawBitmap(...);

DirectDraw