CPen クラス

Windows のグラフィック デバイス インターフェイス (GDI) のペンをカプセル化したものです。

構文

class CPen : public CGdiObject

メンバー

パブリック コンストラクター

名前 説明
CPen::CPen CPen オブジェクトを構築します。

パブリック メソッド

名前 説明
CPen::CreatePen スタイル、幅、ブラシの属性を指定して、論理的な外観または幾何学的なペンを作成し、オブジェクトに CPen アタッチします。
CPen::CreatePenIndirect 構造体に指定されたスタイル、幅、色を持つペンを LOGPEN 作成し、オブジェクトに CPen アタッチします。
CPen::FromHandle Windows HPEN を指定すると、 CPen オブジェクトへのポインターを返します。
CPen::GetExtLogPen 基になる構造体を EXTLOGPEN 取得します。
CPen::GetLogPen 基になる構造体を LOGPEN 取得します。

パブリック演算子

名前 説明
CPen::operator HPEN CPen オブジェクトにアタッチされている Windows ハンドルを返します。

解説

使用のCPen詳細については、「グラフィック オブジェクト」を参照してください

継承階層

CObject

CGdiObject

CPen

必要条件

ヘッダー:afxwin.h

CPen::CPen

CPen オブジェクトを構築します。

CPen();

CPen(
    int nPenStyle,
    int nWidth,
    COLORREF crColor);

CPen(
    int nPenStyle,
    int nWidth,
    const LOGBRUSH* pLogBrush,
    int nStyleCount = 0,
    const DWORD* lpStyle = NULL);

パラメーター

nPenStyle
ペンのスタイルを指定します。 コンストラクターの最初のバージョンのこのパラメーターには、次のいずれかの値を指定できます。

  • PS_SOLID 実線ペンを作成します。

  • PS_DASH 破線のペンを作成します。 ペンの幅がデバイス単位で 1 以下の場合にのみ有効です。

  • PS_DOT 点線のペンを作成します。 ペンの幅がデバイス単位で 1 以下の場合にのみ有効です。

  • PS_DASHDOT ダッシュとドットを交互に使用してペンを作成します。 ペンの幅がデバイス単位で 1 以下の場合にのみ有効です。

  • PS_DASHDOTDOT ダッシュと二重のドットを交互に使用してペンを作成します。 ペンの幅がデバイス単位で 1 以下の場合にのみ有効です。

  • PS_NULL null ペンを作成します。

  • PS_INSIDEFRAME外接する四角形を指定する Windows GDI 出力関数によって生成される閉じた図形のフレーム内に線を描画するペンを作成します (たとえば、、、EllipseRectangle、、RoundRectPie、メンバーChord関数)。 外接する四角形 (メンバー関数など) を指定しない Windows GDI 出力関数でこのスタイルを LineTo 使用する場合、ペンの描画領域はフレームによって制限されません。

コンストラクターの 2 番目の CPen バージョンでは、型、スタイル、終了キャップ、結合属性の組み合わせを指定します。 各カテゴリの値は、ビットごとの "or" (|) 演算子を使用して結合する必要があります。 ペンの種類には、次のいずれかの値を指定できます。

  • PS_GEOMETRIC ジオメトリック ペンを作成します。

  • PS_COSMETIC 化粧ペンを作成します。

    コンストラクターの 2 番目のバージョンでは、 CPen 次のペン スタイルが nPenStyle追加されます。

  • PS_ALTERNATE 他のすべてのピクセルを設定するペンを作成します。 (このスタイルは、化粧品用ペンにのみ適用されます)。

  • PS_USERSTYLE ユーザーが指定したスタイル配列を使用するペンを作成します。

    エンド キャップには、次のいずれかの値を指定できます。

  • PS_ENDCAP_ROUND エンド キャップは丸型です。

  • PS_ENDCAP_SQUARE エンド キャップは正方形です。

  • PS_ENDCAP_FLAT エンド キャップはフラットです。

    結合には、次のいずれかの値を指定できます。

  • PS_JOIN_BEVEL 結合は面取りされます。

  • PS_JOIN_MITER 結合は、関数によって設定された現在の制限内にある場合に mitered されます SetMiterLimit 。 結合がこの制限を超えると、面取りされます。

  • PS_JOIN_ROUND 結合はラウンドです。

nWidth
ペンの幅を指定します。

  • コンストラクターの最初のバージョンでは、値 0 は値 1 と同様に扱われますが、ペンが使用される Graphics オブジェクトに対して有効なスケール変換操作の影響を受けません。幅は常に 1 ピクセルです。

  • コンストラクターの 2 番目のバージョンの場合 nPenStyle 、幅は PS_GEOMETRIC論理単位で指定されます。 ある場合 nPenStylePS_COSMETIC幅は 1 に設定する必要があります。

crColor
ペンの RGB 色を含みます。

pLogBrush
構造体を LOGBRUSH ポイントします。 の場合、構造体のメンバーはLOGBRUSHペンの色を指定し、lbStyle構造体のメンバーを LOGBRUSH 〗 に設定するBS_SOLID必要があります。lbColornPenStylePS_COSMETIC ある場合 nPenStylePS_GEOMETRIC、すべてのメンバーを使用してペンのブラシ属性を指定する必要があります。

nStyleCount
配列の長さを doubleword 単位で lpStyle 指定します。 指定しないPS_USERSTYLE場合nPenStyle、この値は 0 である必要があります。

lpStyle
doubleword 値の配列を指します。 最初の値は、ユーザー定義スタイルの最初のダッシュの長さを指定し、2 番目の値は最初のスペースの長さを指定します。 このポインターは、そうでないPS_USERSTYLE場合nPenStyleNULL指定する必要があります。

解説

引数なしでコンストラクターを使用する場合は、結果のCPenオブジェクトを 、CreatePenIndirectまたはCreateStockObjectメンバー関数でCreatePen初期化する必要があります。

引数を受け取るコンストラクターを使用する場合、それ以上の初期化は必要ありません。 引数を持つコンストラクターは、エラーが発生した場合に例外をスローできますが、引数のないコンストラクターは常に成功します。

// Create a solid red pen of width 2.
CPen myPen1(PS_SOLID, 2, RGB(255, 0, 0));

// Create a geometric pen.
LOGBRUSH logBrush;
logBrush.lbStyle = BS_SOLID;
logBrush.lbColor = RGB(0, 255, 0);
CPen myPen2(PS_DOT | PS_GEOMETRIC | PS_ENDCAP_ROUND, 2, &logBrush);

CPen::CreatePen

スタイル、幅、ブラシの属性を指定して、論理的な外観または幾何学的なペンを作成し、オブジェクトに CPen アタッチします。

BOOL CreatePen(
    int nPenStyle,
    int nWidth,
    COLORREF crColor);

BOOL CreatePen(
    int nPenStyle,
    int nWidth,
    const LOGBRUSH* pLogBrush,
    int nStyleCount = 0,
    const DWORD* lpStyle = NULL);

パラメーター

nPenStyle
ペンのスタイルを指定します。 使用可能な値の一覧については、コンストラクターの nPenStyle パラメーターを CPen 参照してください。

nWidth
ペンの幅を指定します。

  • 最初の CreatePenバージョンでは、値 0 は 1 の値と同様に扱われますが、ペンが使用されている Graphics オブジェクトに対して有効なスケール変換操作の影響を受けません。幅は常に 1 ピクセルです。

  • 2 番目のバージョンの CreatePen場合 nPenStyle 、幅は PS_GEOMETRIC論理単位で指定されます。 ある場合 nPenStylePS_COSMETIC幅は 1 に設定する必要があります。

crColor
ペンの RGB 色を含みます。

pLogBrush
構造体を LOGBRUSH ポイントします。 の場合、構造体のメンバーはLOGBRUSHペンの色を指定し、lbStyle構造体のメンバーを LOGBRUSH 〗 に設定するBS_SOLID必要があります。lbColornPenStylePS_COSMETIC ある場合 nPenStylePS_GEOMETRIC、すべてのメンバーを使用してペンのブラシ属性を指定する必要があります。

nStyleCount
配列の長さを doubleword 単位で lpStyle 指定します。 指定しないPS_USERSTYLE場合nPenStyle、この値は 0 である必要があります。

lpStyle
doubleword 値の配列を指します。 最初の値は、ユーザー定義スタイルの最初のダッシュの長さを指定し、2 番目の値は最初のスペースの長さを指定します。 このポインターは、そうでないPS_USERSTYLE場合nPenStyleNULL指定する必要があります。

戻り値

成功した場合は 0 以外、メソッドが失敗した場合は 0。

解説

最初の CreatePen バージョンでは、指定したスタイル、幅、色を使用してペンを初期化します。 その後、任意のデバイス コンテキストの現在のペンとしてペンを選択できます。

幅が 1 ピクセルを超えるペンは、常に 、PS_SOLID、またはPS_INSIDEFRAMEスタイルをPS_NULL持つ必要があります。

ペンに論理カラー テーブルの PS_INSIDEFRAME 色と一致しないスタイルと色がある場合、ペンはディザリングされた色で描画されます。 ペン スタイルを PS_SOLID 使用して、ディザリングされた色のペンを作成することはできません。 スタイル PS_INSIDEFRAME は、ペンの幅が 1 以下の場合と同じです PS_SOLID

2 番目の CreatePen バージョンでは、指定したスタイル、幅、ブラシの属性を持つ論理的な外観または幾何学的ペンを初期化します。 化粧品用ペンの幅は常に1です。ジオメトリック ペンの幅は常にワールド単位で指定されます。 アプリケーションは、論理ペンを作成した後、関数を呼び出すことによって、そのペンをデバイス コンテキストに CDC::SelectObject 選択できます。 ペンをデバイス コンテキストに選択した後、線と曲線を描画するために使用できます。

  • is PS_COSMETIC の場合nPenStylePS_USERSTYLE配列内のエントリはlpStyle、スタイル単位でダッシュとスペースの長さを指定します。 スタイル単位は、ペンを使用して線を描画するデバイスによって定義されます。

  • is PS_GEOMETRIC の場合nPenStylePS_USERSTYLE配列内のエントリはlpStyle、ダッシュの長さとスペースを論理単位で指定します。

  • あるPS_ALTERNATE場合nPenStyle、スタイル単位は無視され、他のすべてのピクセルが設定されます。

アプリケーションで特定のペンが不要になった場合は、リソースが使用されなくなったように、メンバー関数をCGdiObject::DeleteObjectCPen呼び出すか、オブジェクトを破棄する必要があります。 デバイス コンテキストでペンが選択されている場合、アプリケーションはペンを削除しないでください。

CPen myPen1, myPen2;

// Create a solid red pen of width 2.
myPen1.CreatePen(PS_SOLID, 2, RGB(255, 0, 0));

// Create a geometric pen.
LOGBRUSH logBrush;
logBrush.lbStyle = BS_SOLID;
logBrush.lbColor = RGB(0, 255, 0);
myPen2.CreatePen(PS_DOT | PS_GEOMETRIC | PS_ENDCAP_ROUND, 2, &logBrush);

CPen::CreatePenIndirect

指定された構造体で指定されたスタイル、幅、色を持つペンを lpLogPen初期化します。

BOOL CreatePenIndirect(LPLOGPEN lpLogPen);

パラメーター

lpLogPen
ペンに関する情報を含む Windows LOGPEN 構造体を指します。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

幅が 1 ピクセルを超えるペンは、常に 、PS_SOLID、またはPS_INSIDEFRAMEスタイルをPS_NULL持つ必要があります。

ペンに論理カラー テーブルの PS_INSIDEFRAME 色と一致しないスタイルと色がある場合、ペンはディザリングされた色で描画されます。 スタイルは PS_INSIDEFRAME 、ペンの幅が 1 以下の場合と同じです PS_SOLID

LOGPEN logpen;
CPen   cMyPen;

// Get the LOGPEN of an existing pen.
penExisting.GetLogPen(&logpen);

// Change the color to red and the width to 2.
logpen.lopnWidth.x = 2;
logpen.lopnColor = RGB(255, 0, 0);

// Create my pen using the new settings.
cMyPen.CreatePenIndirect(&logpen);

CPen::FromHandle

Windows GDI ペン オブジェクトへのハンドルを CPen 指定したオブジェクトへのポインターを返します。

static CPen* PASCAL FromHandle(HPEN hPen);

パラメーター

hPen
HPEN ハンドルを Windows GDI ペンに接続します。

戻り値

成功した場合は CPen オブジェクトへのポインター。それ以外の場合 NULL

解説

オブジェクトが CPen ハンドルにアタッチされていない場合は、一時 CPen オブジェクトが作成され、アタッチされます。 この一時 CPen オブジェクトは、アプリケーションがイベント ループで次にアイドル時間を過ぎ、その時点ですべての一時グラフィック オブジェクトが削除されるまで有効です。 つまり、一時オブジェクトは、1 つのウィンドウ メッセージの処理中にのみ有効です。

// Convert an HPEN to a CPen*.
// NOTE: hPen is a valid pen handle.
CPen* pPen = CPen::FromHandle(hPen);

CPen::GetExtLogPen

基になる構造体を EXTLOGPEN 取得します。

int GetExtLogPen(EXTLOGPEN* pLogPen);

パラメーター

pLogPen
ペンに関する EXTLOGPEN 情報を含む構造体を指します。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

この構造体は EXTLOGPEN 、ペンのスタイル、幅、ブラシの属性を定義します。 たとえば、ペンの特定のスタイルに一致するように呼び出 GetExtLogPen します。

ペン属性の詳細については、Windows SDK の次のトピックを参照してください。

次のコード例では、ペンの属性を取得し、同じ色の新しい化粧品用ペンを作成する呼び出し GetExtLogPen を示します。

EXTLOGPEN extlogpen;
penExisting.GetExtLogPen(&extlogpen);
CPen penOther;
LOGBRUSH LogBrush = { extlogpen.elpBrushStyle, extlogpen.elpColor,
   extlogpen.elpHatch };
penOther.CreatePen(PS_COSMETIC, 1, &LogBrush);

CPen::GetLogPen

基になる構造体を LOGPEN 取得します。

int GetLogPen(LOGPEN* pLogPen);

パラメーター

pLogPen
ペンに関する LOGPEN 情報を格納する構造体を指します。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

この構造体は LOGPEN 、ペンのスタイル、色、パターンを定義します。

たとえば、ペンの特定のスタイルに一致するように呼び出 GetLogPen します。

ペン属性の詳細については、Windows SDK の次のトピックを参照してください。

次のコード例では、ペン文字を取得し、同じ色の新しいソリッド ペンを作成する呼び出し GetLogPen を示します。

LOGPEN logpen;
penExisting.GetLogPen(&logpen);
CPen penOther(PS_SOLID, 0, logpen.lopnColor);

CPen::operator HPEN

オブジェクトの添付 Windows GDI ハンドルを CPen 取得します。

operator HPEN() const;

戻り値

成功した場合は、オブジェクトによって CPen 表される Windows GDI オブジェクトへのハンドル。それ以外の場合 NULLは .

解説

この演算子は、HPEN オブジェクトの直接使用をサポートするキャスト演算子です。

グラフィック オブジェクトの使用の詳細については、Windows SDK のグラフィック オブジェクトに関する記事を参照してください。

// Create a solid red pen of width 2.
CPen myPen(PS_SOLID, 2, RGB(255, 0, 0));

// Get the handle of the pen object.
HPEN hPen = (HPEN)myPen;

関連項目

CGdiObject クラス
階層図
CBrush クラス