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
一次將位圖系結為多個轉譯目標的目標位圖是可以接受的。 執行此動作的應用程式必須與 Flush 或 EndDraw正確同步處理轉譯。
您可以隨時變更目標,包括繪製內容時。
您可以將目標設定為 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 應用程式] |
目標平臺 | 窗戶 |
標頭 | d2d1_1.h |
DLL | D2d1.dll |