검색결과 리스트
글
C# 원격제어에 이용할 API 함수들
CreateCompatibleDC : HDC CreateCompatibleDC(HDC hdc)
인수로 주어진 hdc와 호환되는 메모리 DC를 생성한다. 여기서 호환된다는 뜻은 색상 포맷이 같다는 뜻이며 색상 포맷이 같은 DC끼리는 비트맵을 전송할 수 있다.
화면 DC는 메모리 상에 존재하는 그리기 표면이다. 실제 화면 DC와 마찬가지로 모든 GDI 출력 함수를 사용할 수 있으므로 프로그램 내부에서 미리 그리기를 할 때 메모리 DC를 사용한다. 메모리 DC로 보내지는 출력은 메모리 DC에 선택되어 있는 비트맵의 표면으로 출력된다.
최초 메모리 DC가 생성되면 그리기 표면은 1픽셀짜리 흑백 비트맵을 가지며 비트맵을 선택해 주면 이 비트맵의 높이와 폭, 색상 포맷을 가지는 그리기 표면이 만들어진다. 따라서 메모리 DC에 미리 그리기를 하고자할 때는 먼저 CreateCompatibleBitmap 함수로 생성한 원하는 크기의 비트맵을 먼저 선택해 주어야 한다. 또는 미리 읽어놓은 그림을 출력할고자 할 때는 LoadBitmap으로 읽은 비트맵을 메모리 DC에 선택해 준 후 BitBlt 등의 함수로 화면 DC로 전송한다.
다음 코드는 비트맵을 화면으로 출력하는 가장 일반적인 코드이다. 화면 DC와 호환되는 메모리 DC를 생성한 후 비트맵을 메모리 DC에 선택하고 BitBlt로 화면 DC로 전송한다. 화면 DC는 비트맵을 선택할 수 없기 때문에 반드시 메모리 DC에 비트맵을 선택한 후 원하는 부분을 화면 DC로 전송해야 한다.
GetDasktopWindow()
데스크탑 윈도우에 대한 포인터를 얻음
DeleteObject : BOOL DeleteObject( HGDIOBJ hObject)
GDI오브젝트를 삭제하고 오브젝트가 사용하던 시스템 리소스를 해제한다. CreatePen, CreateSolidBrush 등의 함수로 만들어진 GDI 오브젝트는 반드시 삭제해 주어야 한다. DC에 선택되어 있는 오브젝트는 삭제할 수 없으므로 삭제하기 전에 반드시 같은 타입의 다른 오브젝트를 선택해 주어야 한다. 패턴 브러시가 삭제될 때 비트맵은 삭제되지 않으므로 직접 삭제해 주어야 한다.
SelectObject : HGDIOBJ SelectObject( HDC hdc,HGDIOBJ hgdiobj)
GDI는 그래픽 출력에 사용되는 도구이며 펜, 브러시, 비트맵, 리전, 패스, 팔레트, 폰트 등등이 있다. 그리기에 사용할 GDI 오브젝트를 변경하고자 할 때 이 오브젝트를 만든 후 이 함수로 DC에 선택해 주어야 한다. 다음은 브러시를 생성하여 DC에 선택하는 예이다.
HBRUSH MyBrush,OldBrush;
MyBrush=CreateSolidBrush(RGB(255,255,0));
OldBrush=(HBRUSH)SelectObject(hdc,MyBrush);
// 브러시를 사용한다.
SelectObject(hdc,OldBrush);
DeleteObject(MyBrush);
CreateSolidBrush로 MyBrush 브러시를 만든 후 SelectObject 함수로 이 브러시를 DC에 선택해 준다. 이 때 SelectObject가 리턴하는 이전 브러시의 핸들은 복구를 위해 OldBrush 등의 변수에 저장해 두어야 한다. 브러시를 선택한 후 모든 그리기 함수는 MyBrush로 면을 채색한다. 브러시를 사용한 후에는 반드시 DeleteObject 함수로 삭제해 주어야 하되 그전에 DC에 선택되어 있는 브러시를 선택해제해 주어야 한다. DC에 선택된 브러시는 삭제할 수 없기 때문이다. 그래서 OldBrush를 다시 선택해 주어 MyBrush를 해제하도록 하였다. 이 코드는 다음과 같이 한줄로 작성할 수도 있다.
DeleteObject(SelectObject(hdc,OldBrush))
SelectObject 함수가 이전에 선택되어 있던 같은 타입의 GDI 오브젝트를 리턴해 주기 때문에 리턴되는 브러시를 DeleteObject 함수로 삭제하였다.

RECENT COMMENT