IViewObject::D raw 메서드(oleidl.h)

지정된 디바이스 컨텍스트에 개체의 표현을 그립니다.

구문

HRESULT Draw(
  [in] DWORD                          dwDrawAspect,
  [in] LONG                           lindex,
  [in] void                           *pvAspect,
  [in] DVTARGETDEVICE                 *ptd,
  [in] HDC                            hdcTargetDev,
  [in] HDC                            hdcDraw,
  [in] LPCRECTL                       lprcBounds,
  [in] LPCRECTL                       lprcWBounds,
  [in] BOOL(* )(ULONG_PTR dwContinue) pfnContinue,
  [in] ULONG_PTR                      dwContinue
);

매개 변수

[in] dwDrawAspect

그릴 모양, 즉 개체 표현 방법을 지정합니다. 표현에는 콘텐츠, 아이콘, 축소판 그림 또는 인쇄된 문서가 포함됩니다. 유효한 값은 DVASPECTDVASPECT2 열거형에서 가져옵니다. 최적화된 그리기 인터페이스를 지원하는 최신 개체 및 컨테이너는 DVASPECT2 열거형 값을 지원합니다. 최적화된 그리기 인터페이스를 지원하지 않는 이전 개체 및 컨테이너는 DVASPECT2 지원하지 않을 수 있습니다. 창 없는 개체는 DVASPECT_CONTENT, DVASPECT_OPAQUE 및 DVASPECT_TRANSPARENT만 허용합니다.

[in] lindex

그리기 작업의 대상인 개체의 부분입니다. 해석은 dwAspect 매개 변수의 값에 따라 달라집니다. 자세한 내용은 DVASPECT 열거형을 참조하세요.

[in] pvAspect

지정된 측면에 따라 그리기 최적화를 가능하게 하는 DVASPECTINFO 구조체의 추가 정보에 대한 포인터입니다. 최적화된 그리기 인터페이스를 지원하는 최신 개체 및 컨테이너도 이 매개 변수를 지원합니다. 최적화된 그리기 인터페이스를 지원하지 않는 이전 개체 및 컨테이너는 항상 이 매개 변수에 대해 NULL 을 지정합니다.

[in] ptd

개체를 렌더링할 디바이스를 설명하는 DVTARGETDEVICE 구조체에 대한 포인터입니다. NULL인 경우 기본 대상 디바이스(일반적으로 표시)에 대해 뷰를 렌더링해야 합니다. NULL 이외의 값은 hdcTargetDevhdcDraw와 함께 해석됩니다. 예를 들어 hdcDraw 가 프린터를 디바이스 컨텍스트로 지정하는 경우 ptd 매개 변수는 해당 프린터 디바이스를 설명하는 구조를 가리킵니다. hdcTargetDev가 유효한 값이거나 hdcTargetDevNULL인 경우 인쇄 미리 보기 모드로 표시될 수 있는 경우 데이터가 실제로 인쇄될 수 있습니다.

[in] hdcTargetDev

개체가 디바이스 메트릭을 추출하고 디바이스의 기능을 테스트할 수 있는 ptd 매개 변수로 표시된 대상 디바이스에 대한 정보 컨텍스트입니다. ptdNULL이면 이고, 개체는 hdcTargetDev 매개 변수의 값을 무시해야 합니다.

[in] hdcDraw

개체를 그릴 장치 컨텍스트입니다. 창 없는 개체의 경우 hdcDraw 매개 변수는 포함된 창의 클라이언트 좌표와 일치하는 논리적 좌표가 있는 MM_TEXT 매핑 모드에 있어야 합니다. 창이 없는 개체의 경우 디바이스 컨텍스트는 WM_PAINT 메시지에서 일반적으로 전달되는 것과 동일한 상태여야 합니다.

[in] lprcBounds

hdcDraw에서 사각형을 지정하고 개체를 그려야 하는 RECTL 구조체에 대한 포인터입니다. 이 매개 변수는 개체의 위치 지정 및 스트레치를 제어합니다. 창 없는 현재 위치 활성 개체를 그리려면 이 매개 변수는 NULL 이어야 합니다. 다른 모든 상황에서 NULL 은 법적 가치가 아니며 E_INVALIDARG 오류 코드가 발생합니다. 컨테이너가 NULL 이 아닌 값을 창 없는 개체에 전달하는 경우 개체는 요청된 측면을 지정된 디바이스 컨텍스트 및 사각형으로 렌더링해야 합니다. 컨테이너는 창이 없는 개체에서 개체의 두 번째 비활성 보기를 렌더링하거나 개체를 인쇄하도록 요청할 수 있습니다.

[in] lprcWBounds

hdcDraw가 메타파일 디바이스 컨텍스트인 경우 기본 메타파일에서 경계 사각형을 지정하는 RECTL 구조체에 대한 포인터입니다. 사각형 구조체에는 창 익스텐트 및 창 원점이 포함됩니다. 이러한 값은 메타파일을 그리는 데 유용합니다. lprcBounds로 표시된 사각형은 이 lprcWBounds 사각형 내에 중첩됩니다. 동일한 좌표 공간에 있습니다.

hdcDraw가 메타파일 디바이스 컨텍스트가 아닌 경우 lprcWBounds는NULL입니다.

[in] pfnContinue

긴 그리기 작업 동안 뷰 개체가 작업을 계속할지 또는 취소할지를 결정하기 위해 주기적으로 호출해야 하는 콜백 함수에 대한 포인터입니다. 이 함수는 그리 기를 계속하려면 TRUE를 반환합니다. IViewObject::D raw가 DRAW_E_ABORT 반환하는 그리기를 중지하려면 FALSE를 반환합니다.

dwContinue

[in] dwContinue

pfnContinue 매개 변수가 가리키는 함수에 매개 변수로 전달할 값입니다. 일반적으로 dwContinue 는 콜백 함수 내에 필요한 애플리케이션 정의 구조체에 대한 포인터입니다.

반환 값

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

반환 코드 설명
OLE_E_BLANK
그릴 데이터가 없습니다.
DRAW_E_ABORT
그리기 작업이 중단되었습니다.
VIEW_E_DRAW
그리기 중 오류가 발생했습니다.
DV_E_LINDEX
lindex의 값이 잘못되었습니다. 현재 -1만 지원됩니다.
DV_E_DVASPECT
dwAspect 값이 잘못되었습니다.
OLE_E_INVALIDRECT
사각형이 잘못되었습니다.

설명

컨테이너 애플리케이션이 IViewObject::D raw 를 호출하여 포함된 개체의 표현을 만듭니다. 이 메서드는 지정된 디바이스 컨텍스트(hdcDraw)에서 지정된 뷰(dwAspectpvAspect)의 지정된 조각(lindex)을 그립니다. 서식 지정, 글꼴 및 기타 렌더링 결정은 ptd 매개 변수로 지정된 대상 디바이스를 기준으로 결정됩니다.

dwDrawAspect 값과 lprcbounds 값 간에 관계가 있습니다. lprcbounds 값은 그리기를 매핑할 hdcDraw의 사각형을 지정합니다. DVASPECT_THUMBNAIL, DVASPECT_ICON 및 DVASPECT_SMALLICON 개체는 그리려는 모든 것을 그리고 최상의 방법으로 지정된 공간에 매핑합니다. 일부 개체는 맞춤으로 크기를 조정할 수 있지만 가로 세로 비율은 유지할 수 있습니다. 또한 드로잉이 전체 너비로 나타나도록 일부 크기가 조정될 수 있지만 아래쪽은 잘립니다. 컨테이너는 IOleObject::SetExtent를 통해 크기를 제안할 수 있지만 렌더링 크기를 제어할 수는 없습니다. DVASPECT_CONTENT 경우 IViewObject::D raw 구현은 IOleObject::SetExtent에서 제공한 익스텐트를 사용하거나 lprcBounds 매개 변수에 지정된 경계 사각형을 사용해야 합니다.

최적화된 그리기 기술과 창 없는 개체를 지원하는 최신 개체의 경우 이 메서드를 다음과 같이 사용해야 합니다.

  • DVASPECT2 정의된 대로 dwAspect에서 새 그리기 측면이 지원됩니다.
  • pvAspect 매개 변수를 사용하여 DVASPECTINFO 구조를 통해 그리기 최적화를 허용하는 추가 정보를 전달할 수 있습니다.
  • iViewObject::D raw 메서드를 호출하여 lrpcBounds 매개 변수를 NULL로 설정하여 창 없는 현재 위치 활성 개체를 다시 그릴 수 있습니다. 다른 모든 상황에서 NULL 은 잘못된 값이며 E_INVALIDARG 오류 코드가 발생합니다. 창 없는 개체는 활성화 동사에서 전달된 사각형을 사용하거나 이 매개 변수를 사용하는 대신 IOleInPlaceObject::SetObjectRects 를 호출합니다. 컨테이너가 NULL 이 아닌 값을 창 없는 개체에 전달하는 경우 개체는 요청된 측면을 지정된 디바이스 컨텍스트 및 사각형으로 렌더링해야 합니다. 컨테이너는 창이 없는 개체에서 개체의 두 번째 비활성 보기를 렌더링하거나 개체를 인쇄하도록 요청할 수 있습니다. 창 없는 개체를 그리는 방법에 대한 자세한 내용은 IOleInPlaceSiteWindowless 인터페이스를 참조하세요.
  • 창이 없는 개체의 경우 dwAspect 매개 변수는 DVASPECT_CONTENT, DVASPECT_OPAQUE 및 DVASPECT_TRANSPARENT 측면만 허용합니다.
  • 창 없는 개체의 경우 hdcDraw 매개 변수는 포함된 창의 클라이언트 좌표와 일치하는 논리적 좌표가 있는 MM_TEXT 매핑 모드에 있어야 합니다. 창이 없는 개체의 경우 디바이스 컨텍스트는 WM_PAINT 메시지에서 일반적으로 전달되는 것과 동일한 상태여야 합니다.
그리기 최적화를 지원하지 않는 이전 개체 및 컨테이너와의 호환성을 유지하려면 원점과 직사각형 익스텐트를 유지 관리하려면 사각형 여부에 관계없이 모든 개체가 필요합니다. 이렇게 하면 컨테이너가 포함된 모든 개체를 사각형으로 간주하고 그리기에서 적절한 렌더링 사각형을 전달할 수 있습니다.

개체의 범위는 그리기 측면에 따라 달라집니다. 사각형이 아닌 개체의 경우 익스텐트는 전체 측면을 덮는 사각형의 크기여야 합니다. 규칙에 따라 개체의 원점은 DVASPECT_CONTENT 측면 사각형의 왼쪽 위 모서리입니다. 즉, 원점은 직사각형이 아닌 개체의 경우에도 개체 사이트에서 유지 관리하는 사각형의 왼쪽 위 모서리와 항상 일치합니다.

요구 사항

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

추가 정보

DVASPECT

DVASPECT2

DVASPECTINFO

IOleInPlaceSiteWindowless

IViewObject

OleDraw