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
詳細については、「グラフィック オブジェクト」を参照してください。
継承階層
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 出力関数によって生成される閉じた図形のフレーム内に線を描画するペンを作成します (たとえば、、、Ellipse
Rectangle
、、RoundRect
Pie
、メンバー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
論理単位で指定されます。 ある場合nPenStyle
、PS_COSMETIC
幅は 1 に設定する必要があります。
crColor
ペンの RGB 色を含みます。
pLogBrush
構造体を LOGBRUSH
ポイントします。 の場合、構造体のメンバーはLOGBRUSH
ペンの色を指定し、lbStyle
構造体のメンバーを LOGBRUSH
〗 に設定するBS_SOLID
必要があります。lbColor
nPenStyle
PS_COSMETIC
ある場合 nPenStyle
は PS_GEOMETRIC
、すべてのメンバーを使用してペンのブラシ属性を指定する必要があります。
nStyleCount
配列の長さを doubleword 単位で lpStyle
指定します。 指定しないPS_USERSTYLE
場合nPenStyle
、この値は 0 である必要があります。
lpStyle
doubleword 値の配列を指します。 最初の値は、ユーザー定義スタイルの最初のダッシュの長さを指定し、2 番目の値は最初のスペースの長さを指定します。 このポインターは、そうでないPS_USERSTYLE
場合nPenStyle
にNULL
指定する必要があります。
解説
引数なしでコンストラクターを使用する場合は、結果の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
論理単位で指定されます。 ある場合nPenStyle
、PS_COSMETIC
幅は 1 に設定する必要があります。
crColor
ペンの RGB 色を含みます。
pLogBrush
構造体を LOGBRUSH
ポイントします。 の場合、構造体のメンバーはLOGBRUSH
ペンの色を指定し、lbStyle
構造体のメンバーを LOGBRUSH
〗 に設定するBS_SOLID
必要があります。lbColor
nPenStyle
PS_COSMETIC
ある場合 nPenStyle
は PS_GEOMETRIC
、すべてのメンバーを使用してペンのブラシ属性を指定する必要があります。
nStyleCount
配列の長さを doubleword 単位で lpStyle
指定します。 指定しないPS_USERSTYLE
場合nPenStyle
、この値は 0 である必要があります。
lpStyle
doubleword 値の配列を指します。 最初の値は、ユーザー定義スタイルの最初のダッシュの長さを指定し、2 番目の値は最初のスペースの長さを指定します。 このポインターは、そうでないPS_USERSTYLE
場合nPenStyle
にNULL
指定する必要があります。
戻り値
成功した場合は 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
の場合nPenStyle
、PS_USERSTYLE
配列内のエントリはlpStyle
、スタイル単位でダッシュとスペースの長さを指定します。 スタイル単位は、ペンを使用して線を描画するデバイスによって定義されます。is
PS_GEOMETRIC
の場合nPenStyle
、PS_USERSTYLE
配列内のエントリはlpStyle
、ダッシュの長さとスペースを論理単位で指定します。ある
PS_ALTERNATE
場合nPenStyle
、スタイル単位は無視され、他のすべてのピクセルが設定されます。
アプリケーションで特定のペンが不要になった場合は、リソースが使用されなくなったように、メンバー関数を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);
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;
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示