次の方法で共有


CPen::CreatePen

更新 : 2007 年 11 月

指定したスタイル、幅、ブラシ属性で論理コスメティック ペンまたはジオメトリック ペンを作成し、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
    ペンのスタイルを指定します。指定できる値は、CPen::CPen コンストラクタのパラメータ nPenStyle を参照してください。

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

    • CreatePen の最初の構文では、この値が 0 のときは、マップ モードとは無関係に常にデバイス単位で 1 ピクセルの幅になります。

    • CreatePen の 2 番目の構文では、nPenStyle が PS_GEOMETRIC のときは、幅を論理単位で指定します。nPenStyle が PS_COSMETIC の場合、幅を 1 に設定します。

  • crColor
    ペンの色を RGB カラー値で指定します。

  • pLogBrush
    LOGBRUSH 構造体へのポインタ。nPenStyle が PS_COSMETIC の場合、LOGBRUSH 構造体の lbColor メンバはペンの色を指定します。また、LOGBRUSH 構造体の lbStyle メンバを BS_SOLID に設定する必要があります。nPenStylePS_GEOMETRIC のときは、ペンのブラシ属性を指定するためにすべてのメンバを使います。

  • nStyleCount
    lpStyle 配列の長さをダブルワード単位で指定します。nPenStyle が PS_USERSTYLE ではないときは、この値には 0 を指定します。

  • lpStyle
    ダブルワード値の配列へのポインタ。最初の値は、ユーザー定義スタイルの点線の点の部分の長さを指定し、2 番目の値はスペースの部分の長さを指定します。以下同じように続けます。nPenStyle が PS_USERSTYLE でないときは、このポインタには NULL を指定します。

戻り値

正常終了した場合は 0 以外、または論理ペンのハンドルを返します。それ以外の場合は 0 を返します。

解説

CreatePen の最初の構文では、指定されたスタイル、幅、色でペンを初期化します。初期化後、このペンはすべてのデバイス コンテキストの現在のペンとして選択できます。

ペンの幅が 1 ピクセルよりも大きいとき、このペンは必ず PS_NULLPS_SOLIDPS_INSIDEFRAME スタイルのいずれかになります。

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

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

  • nPenStyle が PS_COSMETIC であり PS_USERSTYLE のときは、lpStyle 配列の各エントリはスタイル単位での点線の点の部分とスペースの部分の長さ指定になります。スタイル単位は、線の描画に使うペンのデバイスで定義されます。

  • nPenStyle が PS_GEOMETRIC であり PS_USERSTYLE のときは、lpStyle 配列のエントリは論理単位での点線の点の部分とスペースの部分の長さを指定します。

  • nPenStyle が PS_ALTERNATE のときは、スタイル単位を無視し、ピクセルごとに設定します。

アプリケーションで指定したペンが不要になったときは、メンバ関数 CGdiObject::DeleteObject を呼び出すか、または CPen オブジェクトを破棄して、リソースを解放してください。デバイス コンテキストに取り込まれているペンは、アプリケーションで削除できません。

使用例

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);   

必要条件

ヘッダー : afxwin.h

参照

参照

CPen クラス

階層図

CPen::CreatePenIndirect

CPen::CPen

CGdiObject::DeleteObject

LOGBRUSH

その他の技術情報

CPen のメンバ