자료 저장소

# LockWindowUpdate

BOOL LockWindowUpdate(HWND hWndLock);

이 함수는 화면에 그리기를 허가/금지 할 때 사용하는 함수이다.
첫번째 인수로 그리기 금지 대상이 되는 윈도우 핸들을 넘겨주면 된다. 그리기 금지된(Locked)윈도우는 GetDC나
BeginPaint로 DC 핸들을 받을 때 가시 영역이 비어있는 DC를 발급받는다. 가시 영역이 비어있으므로 무효영역과
상관없이 클리핑 영역도 당연히 NULL이 되고 따라서 어떠한 출력도 화면으로 나갈 수 없는 상태가 된다.

그리기를 허가하려면 이 함수를 다시 한번 더 호출하되 인수로 NULL 값을 주면 된다.
락은 한번에 하나의 윈도우에만 걸 수 있다.

다른 윈도우로부터 방해 받고싶지 않다거나 깔끔한 처리를 위해서라든가 등의 이유로 반드시 필요한 경우가 있다.


# SaveDC

DC에는 여러가지 복잡한 정보들이 많이 포함되는데 현재의 DC 상태를 그대로 저장해 놓고 다음에 그 설정상태를
다시 불러 올 수 있는 함수가 제공된다.

int SaveDC(HDC hdc);
BOOL RestoreDC(HDC hdc,int nSavedDC);

SaveDC 함수는 말 그대로 지정한 DC의 모든 설정 상태를 스택에 저장해 놓는다.
그리고 일종의 저장 핸들에 해당하는 정수값 하나를 리턴하고 이렇게 저장된 DC 상태는 언제든지 RestoreDC로
불러 올 수 있다. RestoreDC 함수의 첫번째 인수로 DC의 핸들을 주고 두번째 인수로 SaveDC함수가 리턴한
정수값을 지정한다.


# CreateDC

윈도우와 관련된 DC는 GetDC 등의 함수로 구해 사용하지만 다음 함수를 사용하면 DC를 만들 수도 있다.

HDC  CreateDC(LPCWSTR pwszDriver,LPCWSTR pwszDevice,LPCWSTR pszPort, CONST DEVMODE * pdm);

이 함수는 주로 프린터 DC를 만들 때 사용하는데 화면 DC를 만들 때도 쓸 수 있다.
이 함수로 전체 화면에 대한 DC를 구하면 윈도우 내부뿐만 아니라 화면상의 어디에나 출력을 할 수 있어 여러가지
재미있는 효과를 낼 수 있다.

[현재 모니터의 전체화면을 비트맵으로 떠놓고 이 비트맵을 움직이는 예제]

#include <windows.h> 

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam,int nCmdShow)
{
HDC hdc,hMemDC;
HBITMAP MyBitmap;
int x,y;

int sx=GetSystemMetrics(SM_CXSCREEN);
int sy=GetSystemMetrics(SM_CYSCREEN);

hdc=CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);
hMemDC=CreateCompatibleDC(hdc);
MyBitmap=CreateCompatibleBitmap(hdc,sx,sy);
SelectObject(hMemDC,MyBitmap);
BitBlt(hMemDC,0,0,sx,sy,hdc,0,0,SRCCOPY);

for(y=sy;y>=0;y-=10)
{
BitBlt(hdc,0,y,sx,sy,hMemDC,0,0,SRCCOPY);
Sleep(10);
}

for(x=sx;x>=0;x-=10)
{
BitBlt(hdc,x,0,sx,sy,hMemDC,0,0,SRCCOPY);
Sleep(10);
}

BitBlt(hdc,0,0,sx,sy,hMemDC,0,0,SRCCOPY);

DeleteDC(hMemDC);
DeleteDC(hdc);
DeleteObject(MyBitmap);
return0;
}

댓글 로드 중…

최근에 게시된 글