void drawSurface(RECT *rectTarget, IDirectDrawSurface7 *lpSurface)
{
HDC hdc;
hr=lpSurface->GetDC(&hdc);
int targetWidth = rectTarget->right-rectTarget->left;
int targetHeight = rectTarget->bottom-rectTarget->top;
HDC hMemDC;
hMemDC = CreateCompatibleDC(hdc);
HBITMAP hbmMem = CreateCompatibleBitmap(hdc, targetWidth, targetHeight);
SelectObject(hMemDC, hbmMem);
.....
.....
TextOut(hMemDC, ....);
.....
TransparentBlt(hMemDC, ...);
.....
Rectangle(hMemDC, ...);
....
....
DeleteObject(hbmMem);
DeleteDC(hMemDC);
lpSurface->ReleaseDC(hdc);
}
* lpSurface->GetDC()/lpSurface->ReleaseDC() 하면서 lpSurface 는 lock/unlock 이 된다.
따라서 위 함수 내부에서 DirectDraw Blt 함수가 호출되어서는 안된다.
* Win32 GDI 함수는 기본적으로 DirectDraw 계열 함수보다 훨씬 느리기때문에 위 함수를
사용할때는 두 개의 Surface를 두고 Blt 하는 Double-buffering 방식으로 구현하는것이 좋다.
댓글 없음:
댓글 쓰기