2011-12-28 28 views
5

Tôi có thư viện vẽ trên HDC đã cho bằng cách sử dụng GDI + apis. Tôi muốn sử dụng nó trong một ứng dụng WPF. Tôi đã thử nhận được xử lý từ lớp WindowInteropHelper và chuyển nó đến phương thức thư viện mà bản vẽ. Tuy nhiên nó không đơn giản vì nó không thể tạo Gdi + Graphics từ tay cầm đó.Tôi có thể lấy HDC từ cửa sổ WPF để tôi có thể vẽ nó bằng Gdi + API không?

Sau đó, tôi đã thử sử dụng phần tử WinForm trong điều khiển WindowsFormsHost và sử dụng HDC có sẵn trong sự kiện sơn của điều khiển WinForm và nó hoạt động tốt. Những gì tôi muốn biết là có thể cùng một điều được thực hiện để làm việc trực tiếp trên WPF control \ window? Có cách nào khác để lấy HDC từ các phần tử WPF mà trên đó GDI vẽ apis có thể được sử dụng không?

Trả lời

6

Nếu bạn có tay cầm cửa sổ (HWND) của cửa sổ WPF, có thể thu được bằng cách sử dụng lớp WindowInteropHelper, thì bạn có thể dễ dàng có được xử lý cho ngữ cảnh thiết bị (HDC) cho cửa sổ đó.

Có hai cách để nhận được nó, mặc dù cả hai đều làm điều tương tự. Đầu tiên là P/Gọi các hàm API GDI + cần thiết, nhưng chúng ta có thể loại trừ nó một cách nhanh chóng như là tốn thời gian không cần thiết. Hãy nhớ rằng .NET Framework đã kết thúc tất cả những thứ này để phát triển WinForms trong System.Drawing namespace và đặc biệt là Graphics class. Vì vậy, tất cả những gì bạn cần làm là thêm một tham chiếu đến System.Drawing vào ứng dụng WPF của bạn và bạn sẽ nhận được tất cả các chức năng được gói miễn phí này.

Phần bạn quan tâm là Graphics.FromHwnd method, tạo đối tượng Graphics mới từ tay cầm cửa sổ được chỉ định (HWND).

Khi bạn đã nhận được điều đó, bạn có thể có được xử lý cho ngữ cảnh thiết bị (HDC) bằng cách gọi số Graphics.GetHdc method, trả về chính xác những gì bạn đang theo dõi.

Hãy nhớ rằng bạn cần phải gọi số Dispose method trên đối tượng Graphics sau khi bạn đã hoàn thành nó để giải phóng tài nguyên liên quan của nó.

+0

Thật không may điều này hiện đang làm việc cho tôi – Andreas

Các vấn đề liên quan