Aracılığıyla paylaş


Teknoloji Bölgelerine Genel Bakış

Bir uygulamada WPF, Win32 veya DirectX gibi birden çok sunu teknolojisi kullanılıyorsa, ortak bir üst düzey pencere içindeki işleme alanlarını paylaşmaları gerekir. Bu konuda, WPF birlikte çalışma uygulamanız için sunuyu ve girişi etkileyebilecek sorunlar açıklanmaktadır.

Bölgeler

Üst düzey bir pencerede, birlikte çalışma uygulamasının teknolojilerinden birini oluşturan her HWND'nin kendi bölgesine ("hava sahası" olarak da adlandırılır) sahip olduğunu kavramsallaştırabilirsiniz. Pencere içindeki her piksel, tam olarak bir HWND'ye aittir ve bu da bu HWND'nin bölgesini oluşturur. (Kesin olarak belirtmek gerekirse, birden fazla WPF HWND varsa birden fazla WPF bölgesi vardır, ancak bu tartışmanın amaçları doğrultusunda yalnızca bir tane olduğunu varsayabilirsiniz). Bölge, uygulama ömrü boyunca bu pikselin üzerinde işlemeye çalışan tüm katmanların veya diğer pencerelerin aynı işleme düzeyi teknolojisinin parçası olması gerektiğini gösterir. Wpf piksellerini Win32 üzerinde işlemeye çalışmak istenmeyen sonuçlara yol açar ve birlikte çalışma API'leri aracılığıyla mümkün olduğunca izin verilmez.

Bölge Örnekleri

Aşağıdaki çizimde Win32, DirectX ve WPF'yi bir araya getiren bir uygulama gösterilmektedir. Her teknoloji kendi ayrı, çakışmayan piksel kümesini kullanır ve bölge sorunları yoktur.

Win32, DirectX ve WPF'yi bir araya getiren bir uygulama örneği.

Bu uygulamanın, bu üç bölgeden herhangi biri üzerinde işlemeye çalışan bir animasyon oluşturmak için fare işaretçisi konumunu kullandığını varsayalım. Animasyonun kendisinden hangi teknoloji sorumlu olursa olsun, bu teknoloji diğer ikisinin bölgesini ihlal edecektir. Aşağıdaki çizimde, Win32 bölgesi üzerinde WPF dairesini işleme girişimi gösterilmektedir.

Win32 bölgesi üzerinde WPF dairesini işleme girişimi.

Bir diğer ihlal de farklı teknolojiler arasında saydamlık/alfa harmanlama kullanmayı denemenizdir. Aşağıdaki çizimde WPF kutusu Win32 ve DirectX bölgelerini ihlal eder. Bu WPF kutusundaki pikseller yarı saydam olduğundan, hem DirectX hem de WPF tarafından ortak olarak sahip olmaları gerekir; bu mümkün değildir. Bu da başka bir ihlaldir ve oluşturulamaz.

Win32 ve DirectX bölgelerini ihlal eden bir WPF kutusunu gösteren diyagram.

Önceki üç örnekte dikdörtgen bölgeler kullanılmıştır, ancak farklı şekiller mümkündür. Örneğin, bir bölgede delik olabilir. Aşağıdaki çizimde, wpf ve DirectX bölgelerinin birleştirilmiş boyutu olan dikdörtgen delikli bir Win32 bölgesi gösterilmektedir.

Dikdörtgen delikli win32 bölgesini gösteren diyagram.

Bölgeler tamamen bağımsız veya Win32 HRGN (bölge) tarafından dağıtılabilir herhangi bir şekil de olabilir.

Nonrectangular bölgesini gösteren diyagram.

Saydamlık ve Üst Düzey Windows

Windows'daki pencere yöneticisi yalnızca Win32 HWND'leri işler. Bu nedenle, her WPF Window bir HWND'dir. Window HWND, herhangi bir HWND için genel kurallara uymalıdır. Bu HWND içinde WPF kodu, genel WPF API'lerinin desteklediği her şeyi yapabilir. Ancak masaüstündeki diğer HWND'lerle etkileşimler için WPF'nin Win32 işleme ve işleme kurallarına uyması gerekir. WPF, Win32 API'lerini,dikdörtgen olmayan pencereler için HRGN'leri ve piksel başına alfa için katmanlı pencereleri kullanarak dikdörtgen olmayan pencereleri destekler.

Sabit alfa ve renk tuşları desteklenmez. Win32 katmanlı pencere özellikleri platforma göre farklılık gösterir.

Katmanlı pencereler, penceredeki her piksele uygulanacak bir alfa değeri belirterek tüm pencerenin yarı saydam (yarı saydam) olmasını sağlayabilir. (Win32 aslında piksel başına alfayı destekler, ancak pratik programlarda bu çok zordur, çünkü bu modda iletişim kutuları ve açılan menüler de dahil olmak üzere herhangi bir alt HWND'yi kendiniz çizmeniz gerekir).

WPF, HRGN'leri destekler; ancak, bu işlev için yönetilen API yoktur. platform invoke ve HwndSource kullanarak ilgili Win32 API'lerini çağırabilirsiniz. Daha fazla bilgi için bkz . Yönetilen Koddan Yerel İşlevleri Çağırma.

WPF katmanlı pencerelerin farklı işletim sistemlerinde farklı özellikleri vardır. Bunun nedeni WPF'nin işlemek için DirectX kullanması ve katmanlı pencerelerin öncelikli olarak DirectX işleme için değil GDI işleme için tasarlanmış olmasıdır.

  • WPF, donanım hızlandırılmış katmanlı pencereleri destekler.

  • WPF, özellikle işleme donanım hızlandırmalı olduğunda istediğiniz rengin tam olarak işlenmesini garanti edemeyeceğinden, WPF saydamlık renk anahtarlarını desteklemez.

Birlikte çalışma bölgelerinin sınırlamaları hakkında daha fazla bilgi için bkz . WPF içindeki HWND'ler.

Ayrıca bkz.