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 |
---|---|
|
容器已經在繪製會話中間。 也就是說,已經呼叫這個方法,而且尚未呼叫 IOleInPlaceSiteWindowless::ReleaseDC 方法。 |
備註
呼叫 IOleInPlaceSiteWindowless::ReleaseDC,應釋放此方法取得的裝置內容。
如同這個介面中的其他方法,矩形是在包含視窗的用戶端座標中指定。 容器預期會與對象的網站矩形交集此矩形,並裁剪結果矩形以外的所有專案。 這可防止物件不小心繪製不應該繪製的位置。
容器也會對應裝置內容原點,因此物件可以在包含視窗的用戶端座標中繪製,通常是容器的視窗。 如果容器只是傳遞其視窗裝置內容,這會自動發生。 如果傳回另一個裝置內容,例如,螢幕外記憶體裝置內容,則應該適當地設定檢視區原點。
實作者的注意事項
根據其傳回螢幕或螢幕外裝置內容,以及根據其複雜程度而定,容器可以使用下列其中一種演算法:- 畫面上,單次繪圖
-
畫面上,兩階段繪圖
- 在 IOleInPlaceSiteWindowless::GetDC 方法中,容器應該:
- 取得視窗裝置內容。
- 裁剪任何重迭物件的不透明區域。 這些區域不需要重新繪製,因為它們已在畫面上正確。
- 如果未設定OLEDC_PAINTBKGND,請傳回裝置內容。
- 否則,請裁剪要求裝置內容之物件的不透明部分,並繪製其後方每個物件的不透明部分。
- 繪製每個物件的透明層面後方回到前方,每次都適當地設定裁剪區域。
- 最後傳回裝置內容。
- 在 IOleInPlaceSiteWindowless::ReleaseDC 方法中,容器應該:
- 繪製每個重迭物件的透明部分。
- 釋放裝置內容。
- 在 IOleInPlaceSiteWindowless::GetDC 方法中,容器應該:
-
螢幕外繪圖
- 在 IOleInPlaceSiteWindowless::GetDC 方法中,容器應該:
- 建立畫面相容的記憶體裝置內容,其中包含適當大小的相容位圖。
- 對應裝置內容的檢視區原點,以確保呼叫物件可以使用包含視窗的工作區座標繪製。
- 如果已設定OLEDC_PAINTBKGND,請繪製呼叫物件後方每個物件的DVASPECT_CONTENT。
- 傳回裝置內容。
- 在 IOleInPlaceSiteWindowless::ReleaseDC 方法中,容器應該:
- 繪製每個重迭物件的DVASPECT_CONTENT層面。
- 將螢幕外位圖複製到原本在 IOleInPlaceSiteWindowless::GetDC 中要求呼叫物件的所在位置。
- 刪除並釋放記憶體裝置內容。
- 在 IOleInPlaceSiteWindowless::GetDC 方法中,容器應該:
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | ocidl.h |