ID2D1DeviceContext::SetTarget 方法 (d2d1_1.h)

Direct2D 裝置內容現在將轉譯的點陣圖或命令清單。

語法

void SetTarget(
  [in, optional] ID2D1Image *image
);

參數

[in, optional] image

類型: ID2D1Image*

Direct2D 裝置內容將呈現的介面或命令清單。

傳回值

備註

您可以隨時變更目標,包括內容正在繪製時。

目標可以是使用 D2D1_BITMAP_OPTIONS_TARGET 旗標建立的點陣圖,也可以是命令清單。 其他類型的影像無法設定為目標。 例如,您無法將效果的輸出設定為目標。 如果目標無效,內容將會進入 D2DERR_INVALID_TARGET 錯誤狀態。

您無法同時使用 SetTarget 從多個裝置內容轉譯至位圖/命令清單。 如果影像已在 BeginDraw EndDraw/ 時間範圍內的裝置內容上設定,則會被視為「正在轉譯」。 如果嘗試透過多個裝置內容轉譯至影像,則第一次之後的所有後續裝置內容都會進入錯誤狀態。

想要將影像附加至第二個裝置內容的來電者,應該先在第一個裝置內容上呼叫 EndDraw

以下是正確呼叫順序的範例。

pDC1->BeginDraw();
pDC1->SetTarget(pImage);
// …
pDC1->EndDraw();

pDC2->BeginDraw();
pDC2->SetTarget(pImage);
// …
pDC2->EndDraw();

以下是不正確的呼叫順序範例。

pDC1->BeginDraw();
pDC2->BeginDraw();

pDC1->SetTarget(pImage);

// ...

pDC1->SetTarget(NULL);

pDC2->SetTarget(pImage); // This call is invalid, even though pImage is no longer set on pDC1.

// ...

pDC1->EndDraw(); // This EndDraw SUCCEEDs.
pDC2->EndDraw(); // This EndDraw FAILs


注意 變更目標並不會變更 HWND 轉譯目標呈現的目標所呈現的點陣圖,也不會變更 DC 轉譯目標所呈現的點陣圖。
 
此 API 可讓您輕鬆地讓應用程式使用點陣圖作為來源 (,例如 DrawBitmap) ,以及同時作為目的地。 嘗試在與目標系結的相同裝置內容上使用位圖作為來源,會將裝置內容放入D2DERR_BITMAP_BOUND_AS_TARGET錯誤狀態。

一次將位圖系結為多個轉譯目標的目標位圖是可接受的。 執行此動作的應用程式必須與 FlushEndDraw 正確同步處理轉譯。

您可以隨時變更目標,包括內容正在繪製時。

您可以將目標設定為 NULL,在此情況下,繪圖呼叫會將裝置內容置於具有D2DERR_WRONG_STATE的錯誤狀態。 使用 NULL 目標呼叫 SetTarget 並不會將原始目標位圖還原到裝置內容。

如果裝置內容具有未處理的 HDC,內容將會進入 D2DERR_WRONG_STATE 錯誤狀態。 目標將不會變更。

如果點圖和裝置內容不在相同的資源網域中,內容將會進入 \ 錯誤狀態。 目標將不會變更。

ID2D1RenderTarget::GetPixelSize 會傳回目前目標位圖的大小 (或 0、0) 如果沒有位圖系結) 。 ID2D1RenderTarget::GetSize 會傳回以轉譯目標 DPI 縮放之目前點陣圖的圖元大小。 SetTarget 不會影響轉譯目標的 DPI。

ID2D1RenderTarget::GetPixelFormat 會傳回目前目標位圖的圖元格式 (或 DXGI_FORMAT_UNKNOWN,如果沒有任何 ) ,D2D1_ALPHA_MODE_UNKNOWN

ID2D1Bitmap::CopyFromRenderTarget 會從目前系結的目標位圖複製。

規格需求

需求
最低支援的用戶端 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 適用於 Windows Server 2008 R2 的 Windows Server 2012 和平臺更新 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 d2d1_1.h
Dll D2d1.dll

另請參閱

ID2D1Bitmap1

ID2D1DeviceContext

ID2D1DeviceContext::CreateBitmap

ID2D1DeviceContext::GetTarget