マウス位置の確認

Namespace: FVIL.GDI
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
public override int CheckFocusMarkPosition(
	CFviPoint mouse,
	double margin
)
Visual Basic
Public Overrides Function CheckFocusMarkPosition ( 
	mouse As CFviPoint,
	margin As Double
) As Integer

Parameters

mouse
Type: FVIL.Data..::..CFviPoint
マウスポインタの座標
margin
Type: System..::..Double
マージン (pixel単位)

Return Value

Type: Int32

引数に指定されたマウスポインタの座標が、図形上のどの位置にあるかを示す位置情報を返します。

マウスポインタの座標が外接矩形外にあれば FVIL.GDI.RectPosition.None を返します。 外接矩形内にあれば、下記の値の論理和を返します。

戻り値:
  • FVIL.GDI.RectPosition.Left -
  • FVIL.GDI.RectPosition.Top -
  • FVIL.GDI.RectPosition.Right -
  • FVIL.GDI.RectPosition.Bottom -
  • FVIL.GDI.RectPosition.Center -

Remarks

この関数は、指定されたマウス位置が 外接矩形 のどの位置にあるかを判定します。

引数 mouse に指定された座標が、外接矩形の各辺の上(下図の青色部分)にあると、 該当する FVIL.GDI.RectPosition の値を返します。 全ての辺の内側に有る場合は、全ての辺の論理和(FVIL.GDI.RectPosition.ALL)を返します。 矩形の角や中心・各辺の中央では交差する辺の論理和を返します。(下図の橙色部分)

引数 margin には、マウス位置と矩形の各辺の比較を行う際の誤差範囲を指定します。 margin に 1 を指定すると、±1 画素の範囲で判定します。

Examples

ソースコード:
C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using fvalgcli;    // FvPluginXXXX attribute requires fvalgcli

namespace User.SampleCode.GDI
{
    public partial class GdiPoints
    {
        // ============================================================
        /// <summary>
        /// マウス位置の確認.
        /// </summary>
        [FvPluginExecute]
        public void CheckFocusMarkPosition()
        {
            // 0) 配列の作成.
            fvalgcli.PNT_T[] datas = new fvalgcli.PNT_T[10];
            for (int i = 0; i < 10; i++)
            {
                datas[i].x = i * 10 + i;
                datas[i].y = i * 10 + i;
            }
            FVIL.PNT_T_ARRAY pnts = new FVIL.PNT_T_ARRAY(datas);

            // 1) インスタンスの準備と生成.
            FVIL.GDI.CFviGdiPoints src = new FVIL.GDI.CFviGdiPoints(pnts);

            // 2) 処理実行 と確認.
            FVIL.Data.CFviRectangle cliprect = src.GetClipRect();
            FVIL.Data.CFviPoint mouse = new FVIL.Data.CFviPoint(cliprect.Ed.X + 1, cliprect.Ed.Y);

            int rectPos = src.CheckFocusMarkPosition(mouse, 1);
            Assert.IsTrue( 0 != (rectPos & (int)FVIL.GDI.RectPosition.Right) , "RectPosition={0}", rectPos);

            mouse.X = cliprect.St.X;
            mouse.Y = cliprect.St.Y - 1;
            rectPos = src.CheckFocusMarkPosition(mouse, 1);
            Assert.IsTrue(0 != (rectPos & (int)FVIL.GDI.RectPosition.Top), "RectPosition={0}", rectPos);
        }
    }
}


Visual Basic Copy imageCopy
Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports fvalgcli
' FvPluginXXXX attribute requires fvalgcli
Namespace SampleCode.GDI
    Public Partial Class GdiPoints
        ' ============================================================
        ''' <summary>
        ''' マウス位置の確認.
        ''' </summary>
        <FvPluginExecute> _
        Public Sub CheckFocusMarkPosition()
            ' 0) 配列の作成.
            Dim datas As fvalgcli.PNT_T() = New fvalgcli.PNT_T(9) {}
            For i As Integer = 0 To 9
                datas(i).x = i * 10 + i
                datas(i).y = i * 10 + i
            Next
            Dim pnts As New FVIL.PNT_T_ARRAY(datas)

            ' 1) インスタンスの準備と生成.
            Dim src As New FVIL.GDI.CFviGdiPoints(pnts)

            ' 2) 処理実行 と確認.
            Dim cliprect As FVIL.Data.CFviRectangle = src.GetClipRect()
            Dim mouse As New FVIL.Data.CFviPoint(cliprect.Ed.X + 1, cliprect.Ed.Y)

            Dim rectPos As Integer = src.CheckFocusMarkPosition(mouse, 1)
            Assert.IsTrue(0 <> (rectPos And CInt(FVIL.GDI.RectPosition.Right)), "RectPosition={0}", rectPos)

            mouse.X = cliprect.St.X
            mouse.Y = cliprect.St.Y - 1
            rectPos = src.CheckFocusMarkPosition(mouse, 1)
            Assert.IsTrue(0 <> (rectPos And CInt(FVIL.GDI.RectPosition.Top)), "RectPosition={0}", rectPos)
        End Sub
    End Class
End Namespace

See Also