More actions
imported>Unknown No edit summary |
(Repair MoniWiki formatting after migration) |
||
| Line 45: | Line 45: | ||
서피스의 그림을 백 버퍼로 출력한다. | 서피스의 그림을 백 버퍼로 출력한다. | ||
ShowBitmap(HBITMAP hbm, LPDIRECTDRAWPALETTE pPalette) | ShowBitmap(HBITMAP hbm, LPDIRECTDRAWPALETTE pPalette) | ||
HBITMAP형의 비트맵을 특정한 팔레트를 통해 화면에 출력한다. | HBITMAP형의 비트맵을 특정한 팔레트를 통해 화면에 출력한다. <br /> | ||
당연히 전에 있던 그림은 지워진다. | 당연히 전에 있던 그림은 지워진다. | ||
ColorKeyBlt(DWORD x, DWORD y, LPDIRECTDRAWSURFACE7 pdds, RECT *prc) | ColorKeyBlt(DWORD x, DWORD y, LPDIRECTDRAWSURFACE7 pdds, RECT *prc) | ||
컬러키(투명색)를 가진 채 화면에 출력한다. prc는 사용하지 않는다. | 컬러키(투명색)를 가진 채 화면에 출력한다. prc는 사용하지 않는다. | ||
Blt(DWORD x, DWORD y, LPDIRECTDRAWSURFACE7 pdds, RECT *prc, DWORD dwFlags) | Blt(DWORD x, DWORD y, LPDIRECTDRAWSURFACE7 pdds, RECT *prc, DWORD dwFlags) | ||
컬러키를 뺀채 화면에 출력한다. 만약 dwFlags에 DDBLTFAST_SRCCOLORKEY를 넣어준다면 ColorKeyBlt와 같은 효과를 낸다. | 컬러키를 뺀채 화면에 출력한다. 만약 dwFlags에 DDBLTFAST_SRCCOLORKEY를 넣어준다면 ColorKeyBlt와 같은 효과를 낸다. <br /> | ||
역시 prc는 사용하지 않는다. | 역시 prc는 사용하지 않는다. | ||
Blt(DWORD x, DWORD y, CSurface *pSurface, RECT *prc) | Blt(DWORD x, DWORD y, CSurface *pSurface, RECT *prc) | ||
| Line 74: | Line 74: | ||
# 컬러키 세팅 | # 컬러키 세팅 | ||
surface->SetColorKey(DWORD dwColorKey); | surface->SetColorKey(DWORD dwColorKey); | ||
컬러키(투명색)으로 사용할 색을 COLORREF (RGB) 형에 맞추어서 집어넣으면 된다. | 컬러키(투명색)으로 사용할 색을 COLORREF (RGB) 형에 맞추어서 집어넣으면 된다. <br /> | ||
대개 잘 쓰이지 않는 색을 사용한다. | 대개 잘 쓰이지 않는 색을 사용한다. | ||
# 비트맵으로 surface를 만든 경우가 아니라면 surface에 직접 그림을 그려 넣어줄 수 있다. | # 비트맵으로 surface를 만든 경우가 아니라면 surface에 직접 그림을 그려 넣어줄 수 있다. | ||
| Line 80: | Line 80: | ||
---- | ---- | ||
DirectDraw | DirectDraw | ||
Latest revision as of 14:01, 26 March 2026
개요
TheWarOfGenesis2R페이지의 개설에 따라 사용법을 모읍니다.
DDUtil
DXSDK에서 제공하는 함수 모음집.(ㅡ.ㅡa) (Direct Draw 의 Wrapping Class 가 되겠지요.)
생각보다 초기화하기 까다로운 DX의 사용을 그나마 편하게 해주는 것들이다
DDUtil안에는 두개의 클래스가 있다
CDisplay
DirectDraw의 생성과 Surface와 연결을 담당하는 Class CDisplay의 함수에는 다음과 같은 것이 있다.
- 초기화
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) 위와 같은 일을 하지만 창모드로 생성한다. 색상수가 없는 것은 윈도우 바탕화면의 색상 수를 따라가기 때문이다.
- 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) 문자열로부터 서피스를 생성한다.
- 팔레트
색상수가 적은 비트맵의 경우에는 팔레트를 지정해 주어야 한다. CreatePaletteFromBitmap( LPDIRECTDRAWPALETTE *ppPalette, const TCHAR *strBMP) 특정한 비트맵 파일로부터 팔레트를 얻어온다. SetPalette( LPDIRECTDRAWPALETTE pPalette) CDisplay 에 특정한 팔레트를 세팅한다.
- 서피스(그림)의 출력
서피스의 그림을 백 버퍼로 출력한다. 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는 사용하지 않는다.
- 화면의 갱신
위의 Blt함수들은 백 버퍼에 출력하는 함수들이다. 모든 내용을 백 버퍼에 출력했으면 다음 함수들을 사용하자 Present() 백 버퍼에 출력되어있는 내용을 현재 화면으로 출력한다. 화면을 모두 완성한 후에 사용한다. Clear() 백 버퍼의 내용을 모두 지운다. UpdateBounds() CDislpay의 멤버 m_rcWindow를 갱신한다. 저 CRect형 변수에는 윈도우의 크기가 들어있다.
CSurface
Surface의 생성과 관리를 담당하는 Class
- 초기화
CSurface *surface = NULL;
- 컬러키 세팅
surface->SetColorKey(DWORD dwColorKey); 컬러키(투명색)으로 사용할 색을 COLORREF (RGB) 형에 맞추어서 집어넣으면 된다.
대개 잘 쓰이지 않는 색을 사용한다.
- 비트맵으로 surface를 만든 경우가 아니라면 surface에 직접 그림을 그려 넣어줄 수 있다.
surface->DrawBitmap(...);
DirectDraw