技術領域の概要Technology Regions Overview

WPF、Win32、DirectX などのアプリケーションで複数のプレゼンテーションテクノロジが使用されている場合は、一般的なトップレベルウィンドウ内でレンダリング領域を共有する必要があります。If multiple presentation technologies are used in an application, such as WPF, Win32, or DirectX, they must share the rendering areas within a common top-level window. このトピックでは、WPF 相互運用アプリケーションのプレゼンテーションと入力に影響する可能性がある問題について説明します。This topic describes issues that might influence the presentation and input for your WPF interoperation application.

領域Regions

最上位レベルのウィンドウでは、相互運用アプリケーションのいずれかのテクノロジを構成する各 HWND が独自のリージョン ("空域" とも呼ばれます) を持つことを概念にすることができます。Within a top-level window, you can conceptualize that each HWND that comprises one of the technologies of an interoperation application has its own region (also called "airspace"). ウィンドウ内の各ピクセルは、その HWND の領域を構成する1つの HWND に属します。Each pixel within the window belongs to exactly one HWND, which constitutes the region of that HWND. (厳密に言えば、複数のWPFWPF WPFWPF HWND がある場合は複数の領域がありますが、この説明では、1つだけを想定できます)。(Strictly speaking, there is more than one WPFWPF region if there is more than one WPFWPF HWND, but for purposes of this discussion, you can assume there is only one). この領域は、アプリケーションの有効期間中にそのピクセルの上にレンダリングを試みるすべてのレイヤーまたはその他のウィンドウが、同じレンダリングレベルのテクノロジに含まれる必要があることを意味します。The region implies that all layers or other windows that attempt to render above that pixel during application lifetime must be part of the same render-level technology. このようなWPFWPF場合、 Win32Win32望ましくない結果に対してピクセルをレンダリングしようとすると、相互運用 api を使用して可能な限り許可されなくなります。Attempting to render WPFWPF pixels over Win32Win32 leads to undesirable results, and is disallowed as much as possible through the interoperation APIs.

領域の例Region Examples

次の図は、、DirectX、 Win32Win32およびWPFWPFをミキシングするアプリケーションを示しています。The following illustration shows an application that mixes Win32Win32, DirectX, and WPFWPF. 各テクノロジでは、重複しない個別のピクセルセットが使用され、リージョンに関する問題はありません。Each technology uses its own separate, non-overlapping set of pixels, and there are no region issues.

Win32、DirectX、WPF を混在させるアプリケーションの例。

このアプリケーションがマウスポインターの位置を使用して、これら3つの領域のいずれかにレンダリングしようとするアニメーションを作成するとします。Suppose that this application uses the mouse pointer position to create an animation that attempts to render over any of these three regions. どのテクノロジがアニメーション自体を担当するかにかかわらず、そのテクノロジは他の2つの領域に違反します。No matter which technology was responsible for the animation itself, that technology would violate the region of the other two. 次の図は、Win32 領域に WPF の円を表示しようとした場合を示しています。The following illustration shows an attempt to render a WPF circle over a Win32 region.

Win32 領域の上に WPF の円を表示しようとしました。

異なるテクノロジ間で透明度/アルファブレンドを使用しようとすると、別の違反があります。Another violation is if you try to use transparency/alpha blending between different technologies. 次の図では、 WPFWPFボックスがおよびWin32Win32 DirectX 領域に違反しています。In the following illustration, the WPFWPF box violates the Win32Win32 and DirectX regions. このWPFWPFボックス内のピクセルは半透明であるため、DirectX とWPFWPFの両方によって共同で所有されている必要がありますが、これは不可能です。Because pixels in that WPFWPF box are semi-transparent, they would have to be owned jointly by both DirectX and WPFWPF, which is not possible. これは別の違反であるため、ビルドできません。So this is another violation and cannot be built.

Win32 および DirectX 領域に違反している WPF ボックスを示す図。

前の3つの例では、四角形の領域を使用していましたが、さまざまな形状が考えられます。The previous three examples used rectangular regions, but different shapes are possible. たとえば、領域には穴を付けることができます。For example, a region can have a hole. 次の図は、 Win32Win32四角形の穴がある領域を示していますWPFWPF 。これは、と DirectX 領域の組み合わせのサイズです。The following illustration shows a Win32Win32 region with a rectangular hole this is the size of the WPFWPF and DirectX regions combined.

四角形の穴を持つ Win32 領域を示す図。

また、領域は完全に四角形ではなく、またはWin32Win32 HRGN (region) によって describable された形でもかまいません。Regions can also be completely nonrectangular, or any shape describable by a Win32Win32 HRGN (region).

四角形以外の領域を示す図。

透明度とトップレベルウィンドウTransparency and Top-Level Windows

Windows のウィンドウマネージャーは、実際にWin32Win32は hwnd のみを処理します。The window manager in Windows only really processes Win32Win32 HWNDs. したがって、 WPFWPFはすべてWindow HWND です。Therefore, every WPFWPF Window is an HWND. Hwnd Windowは、すべての hwnd の一般的な規則に従う必要があります。The Window HWND must abide by the general rules for any HWND. その HWND 内でWPFWPF 、コードは api 全体WPFWPFをサポートします。Within that HWND, WPFWPF code can do whatever the overall WPFWPF APIs support. ただし、デスクトップ上の他の hwnd とのWPFWPF対話についWin32Win32ては、は処理と表示の規則を遵守する必要があります。But for interactions with other HWNDs on the desktop, WPFWPF must abide by Win32Win32 processing and rendering rules. WPFWPFでは、api を使用Win32Win32して四角形以外のウィンドウをサポートしています。非四角形ウィンドウの場合は hrgns、ピクセル単位のアルファの場合はレイヤードウィンドウです。supports non-rectangular windows by using Win32Win32 APIs—HRGNs for non-rectangular windows, and layered windows for a per-pixel alpha.

定数アルファおよびカラーキーはサポートされていません。Constant alpha and color keys are not supported. Win32Win32レイヤードウィンドウの機能は、プラットフォームによって異なります。layered window capabilities vary by platform.

レイヤードウィンドウでは、ウィンドウ内のすべてのピクセルに適用するアルファ値を指定することで、ウィンドウ全体を半透明 (半透明) にすることができます。Layered windows can make the entire window translucent (semi-transparent) by specifying an alpha value to apply to every pixel in the window. (Win32Win32実際にはピクセル単位のアルファはサポートされていますが、このモードでは、ダイアログやドロップダウンを含む子 HWND を自分で描画する必要があるため、実際のプログラムでは使用するのが非常に困難です。(Win32Win32 in fact supports per-pixel alpha, but this is very difficult to use in practical programs because in this mode you would need to draw any child HWND yourself, including dialogs and dropdowns).

WPFWPFHRGNs をサポートします。ただし、この機能にはマネージ Api はありません。supports HRGNs; however, there are no managed APIs for this functionality. プラットフォーム呼び出しおよびを使用しHwndSourceて、関連Win32Win32する api を呼び出すことができます。You can use platform invoke and HwndSource to call the relevant Win32Win32 APIs. 詳細については、「マネージコードからのネイティブ関数の呼び出し」を参照してください。For more information, see Calling Native Functions from Managed Code.

WPFWPF階層化されたウィンドウの機能は、オペレーティングシステムによって異なります。layered windows have different capabilities on different operating systems. これは、 WPFWPFが directx を使用してレンダリングするためです。また、レイヤー化されたウィンドウは、主に directx レンダリングではなく GDI レンダリング用に設計されています。This is because WPFWPF uses DirectX to render, and layered windows were primarily designed for GDI rendering, not DirectX rendering.

  • WPF は、ハードウェアアクセラレータによるレイヤードウィンドウをサポートしています。WPF supports hardware accelerated layered windows.

  • WPFWPFは透明色キーをサポートしてWPFWPFいません。これは、特にレンダリングがハードウェアアクセラレータを使用する場合に、要求した色が正確にレンダリングされることを保証できないためです。does not support transparency color keys, because WPFWPF cannot guarantee to render the exact color you requested, particularly when rendering is hardware-accelerated.

関連項目See also