<Return[G]><Top>

GetPath

Declare Function Api_GetPath& Lib "gdi32" Alias "GetPath" (ByVal hDC&, ByRef Points As POINT, ByRef Types As Byte, ByVal PointNum&)

Declare Function GetPath Lib "gdi32" (ByVal hdc As Long, ByRef Points As POINT, ByRef Types As Byte, ByVal PointNum As Long) As Long

指定されたデバイスコンテキスト内で選択されたパスで見つかった、パス内の直線の端点および曲線の制御点を定義する座標を取得する。

パラメータ
hdc
    デバイスコンテキストのハンドルを指定する。このデバイスコンテキストは、閉じたパスを保持していなければならない。
lpPoints
    複数の POINT 構造体を保持するための配列へのポインタを指定する。

    関数から制御が返ると、この配列に、直線の端点や曲線の制御点の座標が格納される。
lpTypes
    関数から制御が返ると、この配列に、点の種類が格納される。このパラメータに、次のいずれかの値を指定する。

    種類                           

説明                                                                                                                                              

    PT_MOVETO

lpPoints パラメータ内の対応する点は、分離型の図形(直線またはベジエ曲線)の始点である。

    PT_LINETO

lpPoints パラメータ内の対応する点は、直線の端点である。1 つ前の点と結ばれる。

    PT_BEZIERTO

lpPoints パラメータ内の対応する点は、ベジエ曲線の制御点または端点である。

 

PT_BEZIERTO の値は常に 3 つ 1 組で現れる。パスの直前にある点は、ベジエ曲線の開始点を定義する。

 

最初の 2 つが制御点、最後の 1 つが端点である(ハードコード化されている場合)。

    PT_LINETO または PT_BEZIERTO のフラグと共に、ビット単位の演算子 OR を使って次のフラグを指定すると、対応する点を図形の最

    後の点にすること、およびその図形を閉じることを指示できる。

    フラグ                          

説明                                                                                                                                             

    PT_CLOSEFIGURE

対応する直線または曲線を描画した後に、図形を閉じるよう指示する。図形を閉じるときは、直線または曲線の

 

終点から、直前の PT_MOVETO に対応する点まで、直線が描画される。

nSize
    lpPoints パラメータで指定した配列に格納できる POINT 構造体の数を指定する。

    この値は、lpTypes パラメータで指定した配列内のバイト数と同じでなければならない。

戻り値
    nSize パラメータが 0 以外の場合、取得した点の個数が返る。

    ただし、nSize パラメータが 0 以外で、指定した数がパス内の点の総数より少なかった場合、-1 が返る。

    nSize パラメータが 0 の場合、パス内の点の総数が返る。このとき、GetPath 関数はバッファに何も格納しない。
    Windows NT/2000:拡張エラー情報を取得するには、GetLastError 関数を使う。

    GetLastError は、次のエラーコードのいずれかを返すことがある。
    ERROR_CAN_NOT_COMPLETE
    ERROR_INVALID_PARAMETER
    ERROR_BUFFER_OVERFLOW

解説
    hdc パラメータで指定されたデバイスコンテキストの中に、閉じたパスが存在していなければならない。
    返されるパス内の点の座標は、論理座標である。各点のデバイス座標が格納されるので、GetPath は現在とは逆の変換を行って、各点

    をデバイス座標から論理座標へ変換する。
    GetPath より前に FlattenPath 関数を呼び出して、パス内のすべての曲線を複数の部分直線へ変換することもできる。