Home > C# > 目的別資料 > Visualレイヤー・プログラミング > msdnドキュメント > 方法:Win32ホスト・コンテナを使用したヒット・テスト

方法:Win32ホスト・コンテナを使用したヒット・テスト

新規作成日 2020-10-09
最終更新日

How to: Hit Test Using a Win32 Host Container

あなたは、ビジュアル・オブジェクトのためのホスト・ウィンドウ・コンテナを提供することで、Win32ウィンドウ内に、ビジュアル・オブジェクトを作成することができます。含まれたビジュアル・オブジェクトのためのイベント処理を提供するために、あなたは、ホスト・ウィンドウ・コンテナのメッセージ・フィルタ・ループに渡されるメッセージを処理します。チュートリアルを参照してください。:Win32ウィンドウに、ビジュアル・オブジェクトを、どのように、ホストするかの詳細については、「Win32アプリケーションでのビジュアル・オブジェクトのホスティング」を参照してください。

Example

次のコードは、ビジュアル・オブジェクトのためのホスト・コンテナで使用する、Win32ウィンドウのためのマウスのイベント・ハンドラを、どのように、設定するかを示しています。

C#
// Constant values from the "winuser.h" header file.
// "winuser.h"ヘッダ・ファイル定数値。
internal const int WM_LBUTTONUP = 0x0202,
                   WM_RBUTTONUP = 0x0205;

internal static IntPtr ApplicationMessageFilter(
    IntPtr hwnd, int message, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    // Handle messages passed to the visual.
    // ビジュアルに渡されるメッセージを処理します。
    switch (message)
    {
        // Handle the left and right mouse button up messages.
        // マウスの左ボタンと右ボタンのアップ・メッセージを処理します。
        case WM_LBUTTONUP:
        case WM_RBUTTONUP:
            System.Windows.Point pt = new System.Windows.Point();
            pt.X = (uint)lParam & (uint)0x0000ffff;  // LOWORD = x
            pt.Y = (uint)lParam >> 16;               // HIWORD = y
            MyShape.OnHitTest(pt, message);
            break;
    }

    return IntPtr.Zero;
}

次の例は、特定のマウス・イベントのトラップに応答するヒット・テストを、どのように設定するかを示しています。

C#
// Constant values from the "winuser.h" header file.
// "winuser.h"ヘッダ・ファイル定数値。
public const int WM_LBUTTONUP = 0x0202,
                 WM_RBUTTONUP = 0x0205;

// Respond to WM_LBUTTONUP or WM_RBUTTONUP messages by determining which visual object was clicked.
// どのビジュアル・オブジェクトが、
// クリックされたか判別することで、WM_LBUTTONUP、あるいは、WM_RBUTTONUPメッセージに、応答します。
public static void OnHitTest(System.Windows.Point pt, int msg)
{
    // Clear the contents of the list used for hit test results.
    // ヒット・テスト結果のために使用されるリストのコンテンツをクリアします。
    hitResultsList.Clear();

    // Determine whether to change the color of the circle or to delete the shape.
    // 円の色を変更するか、形状を削除するかを決定します。
    if (msg == WM_LBUTTONUP)
    {
        MyWindow.changeColor = true;
    }
    if (msg == WM_RBUTTONUP)
    {
        MyWindow.changeColor = false;
    }

    // Set up a callback to receive the hit test results enumeration.
    // ヒット・テスト結果の列挙体を受け取るために、コールバックを設定します。
    VisualTreeHelper.HitTest(MyWindow.myHwndSource.RootVisual,
                             null,
                             new HitTestResultCallback(CircleHitTestResult),
                             new PointHitTestParameters(pt));

    // Perform actions on the hit test results list.
    // ヒット・テスト結果のリストで、動作を実行します。
    if (hitResultsList.Count > 0)
    {
        ProcessHitTestResultsList();
    }
}

HwndSourceオブジェクトは、Win32ウィンドウにWindows Presentation Foundation (WPF)コンテンツを提示します。HwndSourceオブジェクトのRootVisualプロパティの値は、ビジュアル・ツリー階層の最上位のノードを示します。

Win32ホスト・コンテナを使用したヒット・テスト・オブジェクトの完全なサンプルについては、「Win32相互運用サンプルを使用したヒットテスト」を参照してください。

こちらもご覧ください

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」