共用方式為


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。 其他可能的傳回值包括下列專案。

傳回碼 Description
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