다음을 통해 공유


IOleInPlaceSiteWindowless::GetDC 메서드(ocidl.h)

컨테이너에서 화면 또는 호환되는 디바이스에 대한 디바이스 컨텍스트에 대한 핸들이 있는 개체를 제공합니다.

구문

HRESULT GetDC(
  [in]  LPCRECT pRect,
  [in]  DWORD   grfFlags,
  [out] HDC     *phDC
);

매개 변수

[in] pRect

포함하는 창의 클라이언트 좌표에서 개체가 다시 그리려는 사각형에 대한 포인터입니다. 이 매개 변수가 NULL이면 개체의 전체 범위가 다시 그려집니다.

[in] grfFlags

OLEDCFLAGS 열거형의 값 조합입니다.

[out] phDC

반환된 디바이스 컨텍스트에 대한 포인터입니다.

반환 값

이 메서드는 성공에 대한 S_OK 반환합니다. 다른 가능한 반환 값은 다음과 같습니다.

반환 코드 설명
OLE_E_NESTEDPAINT
컨테이너가 이미 페인트 세션 중간에 있습니다. 즉, 이 메서드가 이미 호출되었으며 IOleInPlaceSiteWindowless::ReleaseDC 메서드가 아직 호출되지 않았습니다.

설명

이 메서드에서 가져온 디바이스 컨텍스트는 IOleInPlaceSiteWindowless::ReleaseDC를 호출하여 해제해야 합니다.

이 인터페이스의 다른 메서드와 마찬가지로 사각형은 포함된 창의 클라이언트 좌표에 지정됩니다. 컨테이너는 이 사각형을 개체의 사이트 사각형과 교차하고 결과 사각형 외부의 모든 항목을 잘라낼 것으로 예상됩니다. 이렇게 하면 개체가 의도치 않게 그리는 것을 방지할 수 있습니다.

또한 컨테이너는 디바이스 컨텍스트 원본을 매핑해야 개체가 포함된 창의 클라이언트 좌표(일반적으로 컨테이너 창)에서 그릴 수 있습니다. 컨테이너가 창 디바이스 컨텍스트를 전달하기만 하면 자동으로 발생합니다. 다른 디바이스 컨텍스트(예: 오프스크린 메모리 디바이스 컨텍스트)를 반환하는 경우 뷰포트 원본을 적절하게 설정해야 합니다.

구현자에 대한 참고 사항

화면 또는 화면 끄기 디바이스 컨텍스트를 반환하는지 여부와 얼마나 정교한지에 따라 컨테이너는 다음 알고리즘 중 하나를 사용할 수 있습니다.
  1. 화면의 원패스 드로잉
    1. IOleInPlaceSiteWindowless::GetDC 메서드에서 컨테이너는 다음을 수행해야 합니다.
      • 창 디바이스 컨텍스트를 가져옵니다.
      • OLEDC_PAINTBKGND 설정된 경우 디바이스 컨텍스트를 요청하는 개체 뒤에 있는 모든 개체의 DVASPECT_CONTENT 측면을 그립니다.
      • 디바이스 컨텍스트를 반환합니다.
    2. ReleaseDC 메서드에서 컨테이너는 다음을 수행해야 합니다.
      • 겹치는 모든 개체의 DVASPECT_CONTENT 그립니다.
      • 디바이스 컨텍스트를 해제합니다.
  2. 화면, 두 개의 패스 드로잉
    1. IOleInPlaceSiteWindowless::GetDC 메서드에서 컨테이너는 다음을 수행해야 합니다.
      • 창 디바이스 컨텍스트를 가져옵니다.
      • 겹치는 개체의 불투명 영역을 클리핑합니다. 이러한 지역은 화면에 이미 올바르기 때문에 다시 그릴 필요가 없습니다.
      • OLEDC_PAINTBKGND 설정되지 않은 경우 디바이스 컨텍스트를 반환합니다.
      • 그렇지 않으면 디바이스 컨텍스트를 요청하는 개체의 불투명 부분을 잘라내고 그 뒤에 있는 모든 개체의 불투명 부분을 앞뒤로 그립니다.
      • 뒤로 돌아가서 모든 개체의 투명한 측면을 그려 매번 클리핑 영역을 적절하게 설정합니다.
      • 마지막으로 디바이스 컨텍스트를 반환합니다.
    2. IOleInPlaceSiteWindowless::ReleaseDC 메서드에서 컨테이너는 다음을 수행해야 합니다.
      • 겹치는 모든 개체의 투명한 부분을 그립니다.
      • 디바이스 컨텍스트를 해제합니다.
  3. 화면 끄기 그리기
    1. IOleInPlaceSiteWindowless::GetDC 메서드에서 컨테이너는 다음을 수행해야 합니다.
      • 적절한 크기의 호환 비트맵을 포함하는 화면 호환 메모리 디바이스 컨텍스트를 만듭니다.
      • 디바이스 컨텍스트의 뷰포트 원본을 매핑하여 호출 개체가 포함된 창의 클라이언트 영역 좌표를 사용하여 그릴 수 있는지 확인합니다.
      • OLEDC_PAINTBKGND 설정된 경우 호출 개체 뒤에 있는 모든 개체의 DVASPECT_CONTENT 그립니다.
      • 디바이스 컨텍스트를 반환합니다.
    2. IOleInPlaceSiteWindowless::ReleaseDC 메서드에서 컨테이너는 다음을 수행해야 합니다.
      • 겹치는 모든 개체의 DVASPECT_CONTENT 측면을 그립니다.
      • IOleInPlaceSiteWindowless::GetDC에서 호출 개체가 원래 요청한 위치의 화면에 오프스크린 비트맵을 복사합니다.
      • 메모리 디바이스 컨텍스트를 삭제하고 해제합니다.
이 메서드가 반환되면 개체가 그리지 않아야 하는 영역에 개체를 그릴 수 없도록 디바이스 컨텍스트의 클리핑 영역을 설정해야 합니다. 개체가 불투명하지 않으면 배경이 그려져 있어야 합니다. 디바이스 컨텍스트가 화면인 경우 겹치는 불투명 영역을 잘려야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 ocidl.h

추가 정보

IOleInPlaceSiteWindowless

IOleInPlaceSiteWindowless::ReleaseDC

OLEDCFLAGS