2011-12-28 118 views
5

我有一個使用GDI + API的給定HDC的庫。 我想在WPF應用程序中使用它。我嘗試從WindowInteropHelper類中獲取句柄並將其傳遞給執行繪製的庫方法。然而,它只是因爲它無法從該句柄創建Gdi +圖形而失敗。我可以從WPF窗口獲得HDC,以便使用Gdi + API繪製HDC?

然後,我嘗試在WindowsFormsHost控件中使用WinForm元素,並使用WinForm控件的繪畫事件中可用的HDC,並且它確實工作正常。 我想知道的是同樣的事情可以直接在WPF控件\窗口上工作嗎? 有沒有其他的方式可以從WPF元素獲取HDC的GDI繪製API可以使用?

回答

6

如果您的WPF窗口的窗口句柄(HWND),使用WindowInteropHelper類可能獲得,那麼你可以很容易地獲得一個句柄該窗口的設備上下文(HDC)。

有兩種方法可以獲得,儘管兩種方法最終都做同樣的事情。首先是P /調用必要的GDI + API函數,但是我們可以很快排除這種情況,因爲這會耗費不必要的時間。請記住,.NET Framework已經爲System.Drawing namespace中的WinForms開發包裝了所有這些內容,尤其是Graphics class。因此,您只需將對System.Drawing的引用添加到WPF應用程序中,即可免費獲得所有這些功能。

您感興趣的部分是Graphics.FromHwnd method,它從指定的窗口句柄(HWND)中創建一個新的Graphics對象。

一旦你得到了,你可以通過調用Graphics.GetHdc method,返回獲取句柄到設備上下文(HDC)正是你以後-的IntPtr值,表示一個句柄設備上下文。

請記住,您需要在完成對Graphics對象調用Dispose method以釋放其相關資源。

+0

不幸的是,這現在正在爲我工​​作 – Andreas 2015-09-10 13:56:50