다음을 통해 공유


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 기본 구조를 가져옵니다.

Public 연산자

속성 설명
CPen::operator HPEN 개체에 연결된 Windows 핸들을 CPen 반환합니다.

설명

사용에 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경계 사각형(예Ellipse: , Rectangle, RoundRectPieChord 및 멤버 함수)을 지정하는 Windows GDI 출력 함수에서 생성된 닫힌 셰이프의 프레임 내부에 선을 그리는 펜을 만듭니다. 경계 사각형(예 LineTo : 멤버 함수)을 지정하지 않는 Windows GDI 출력 함수와 함께 이 스타일을 사용하는 경우 펜의 그리기 영역은 프레임에 의해 제한되지 않습니다.

생성자의 두 번째 버전은 CPen 형식, 스타일, 끝 캡 및 조인 특성의 조합을 지정합니다. 각 범주의 값은 비트 "or" (|) 연산자를 사용하여 결합해야 합니다. 펜 형식은 다음 값 중 하나일 수 있습니다.

  • PS_GEOMETRIC 기하학적 펜을 만듭니다.

  • PS_COSMETIC 화장품 펜을 만듭니다.

    생성자의 두 번째 버전은 CPen 다음 펜 스타일을 추가합니다.nPenStyle

  • PS_ALTERNATE 다른 모든 픽셀을 설정하는 펜을 만듭니다. (이 스타일은 화장품 펜에만 적용됩니다.)

  • PS_USERSTYLE 사용자가 제공하는 스타일 배열을 사용하는 펜을 만듭니다.

    끝 상한은 다음 값 중 하나일 수 있습니다.

  • PS_ENDCAP_ROUND 끝 대문자는 둥글습니다.

  • PS_ENDCAP_SQUARE 끝 대문자는 정사각형입니다.

  • PS_ENDCAP_FLAT 끝 대문자는 평평합니다.

    조인은 다음 값 중 하나일 수 있습니다.

  • PS_JOIN_BEVEL 조인은 비정형입니다.

  • PS_JOIN_MITER 조인은 함수에 의해 SetMiterLimit 설정된 현재 제한 내에 있을 때 완화됩니다. 조인이 이 제한을 초과하면 해당 조인은 비정상입니다.

  • PS_JOIN_ROUND 조인은 라운드입니다.

nWidth
펜의 너비를 지정합니다.

  • 생성자의 첫 번째 버전에서는 펜이 사용되는 Graphics 개체에 적용되는 배율 변환 작업의 영향을 받지 않는다는 점을 제외하고 값 0은 1 값과 유사하게 처리됩니다. 너비는 항상 1픽셀입니다.

  • 생성자의 두 번째 버전인 PS_GEOMETRIC경우 nPenStyle 너비가 논리 단위로 제공됩니다. 이 PS_COSMETIC경우 nPenStyle 너비를 1로 설정해야 합니다.

crColor
펜의 RGB 색을 포함합니다.

pLogBrush
구조를 가리킵니다 LOGBRUSH . 이 경우 nPenStyle 구조체의 LOGBRUSH 멤버는 lbColor 펜의 색을 지정하고 lbStyle 구조체의 멤버는 LOGBRUSHBS_SOLID설정해야 PS_COSMETIC합니다. 이 PS_GEOMETRIC경우 nPenStyle 모든 멤버를 사용하여 펜의 브러시 특성을 지정해야 합니다.

nStyleCount
배열의 길이를 이중 단어 단위로 지정합니다 lpStyle . 이 값은 0이 아닌 PS_USERSTYLE경우 nPenStyle 0이어야 합니다.

lpStyle
이중 단어 값의 배열을 가리킵니다. 첫 번째 값은 사용자 정의 스타일에서 첫 번째 대시의 길이를 지정하고, 두 번째 값은 첫 번째 공간의 길이를 지정합니다. 이 포인터는 NULL 그렇지 않은 PS_USERSTYLE경우 nPenStyle 여야 합니다.

설명

인수 없이 생성자를 사용하는 경우 , 또는 CreateStockObject 멤버 함수를 CPen 사용하여 결과 개체를 CreatePenCreatePenIndirect초기화해야 합니다.

인수를 사용하는 생성자를 사용하는 경우 더 이상 초기화가 필요하지 않습니다. 인수가 있는 생성자는 오류가 발생하는 경우 예외를 throw할 수 있지만 인수가 없는 생성자는 항상 성공합니다.

예시

// 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
펜의 스타일을 지정합니다. 가능한 값 목록은 생성자의 매개 변수를 CPen 참조 nPenStyle 하세요.

nWidth
펜의 너비를 지정합니다.

  • 첫 번째 버전의 CreatePen경우 값 0은 1 값과 유사하게 처리됩니다. 단, 펜이 사용되는 Graphics 개체에 적용되는 배율 변환 연산의 영향을 받지 않으며 너비는 항상 1픽셀입니다.

  • 두 번째 버전의 CreatePen경우 nPenStyle PS_GEOMETRIC너비는 논리 단위로 지정됩니다. 이 PS_COSMETIC경우 nPenStyle 너비를 1로 설정해야 합니다.

crColor
펜의 RGB 색을 포함합니다.

pLogBrush
구조를 가리킵니다 LOGBRUSH . 이 경우 nPenStyle 구조체의 LOGBRUSH 멤버는 lbColor 펜의 색을 지정하고 lbStyle 구조체의 멤버는 LOGBRUSHBS_SOLID설정해야 PS_COSMETIC합니다. 이 PS_GEOMETRIC경우 nPenStyle 모든 멤버를 사용하여 펜의 브러시 특성을 지정해야 합니다.

nStyleCount
배열의 길이를 이중 단어 단위로 지정합니다 lpStyle . 이 값은 0이 아닌 PS_USERSTYLE경우 nPenStyle 0이어야 합니다.

lpStyle
이중 단어 값의 배열을 가리킵니다. 첫 번째 값은 사용자 정의 스타일에서 첫 번째 대시의 길이를 지정하고, 두 번째 값은 첫 번째 공간의 길이를 지정합니다. 이 포인터는 NULL 그렇지 않은 PS_USERSTYLE경우 nPenStyle 여야 합니다.

Return Value

성공하면 0이 아니고, 메서드가 실패하면 0입니다.

설명

첫 번째 버전은 CreatePen 지정된 스타일, 너비 및 색으로 펜을 초기화합니다. 이후에 펜을 모든 디바이스 컨텍스트에 대한 현재 펜으로 선택할 수 있습니다.

너비가 1픽셀보다 큰 펜에는 PS_NULLPS_SOLID항상 스타일이 PS_INSIDEFRAME 있어야 합니다.

펜에 PS_INSIDEFRAME 논리적 색 표의 색과 일치하지 않는 스타일과 색이 있는 경우 펜은 디더링된 색으로 그려집니다. 펜 스타일은 PS_SOLID 디더링된 색으로 펜을 만드는 데 사용할 수 없습니다. 스타일 PS_INSIDEFRAME 은 펜 너비가 1보다 작거나 같은 경우와 동일합니다 PS_SOLID .

두 번째 버전은 CreatePen 지정된 스타일, 너비 및 브러시 특성을 가진 논리적 화장품 또는 기하학적 펜을 초기화합니다. 화장품 펜의 너비는 항상 1입니다. 기하학적 펜의 너비는 항상 월드 단위로 지정됩니다. 애플리케이션에서 논리 펜을 만든 후 함수를 호출 CDC::SelectObject 하여 해당 펜을 디바이스 컨텍스트로 선택할 수 있습니다. 펜을 디바이스 컨텍스트로 선택한 후 선과 곡선을 그리는 데 사용할 수 있습니다.

  • PS_COSMETIC PS_USERSTYLE경우 nPenStyle 배열의 항목은 lpStyle 스타일 단위에서 대시 및 공백의 길이를 지정합니다. 스타일 단위는 펜이 선을 그리는 데 사용되는 디바이스에 의해 정의됩니다.

  • PS_GEOMETRIC PS_USERSTYLE경우 nPenStyle 배열의 항목은 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 구조를 가리킵니다.

Return Value

함수가 성공하면 0이 아니고 그렇지 않으면 0입니다.

설명

너비가 1픽셀보다 큰 펜에는 PS_NULLPS_SOLID항상 스타일이 PS_INSIDEFRAME 있어야 합니다.

펜에 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 펜에 대한 핸들입니다.

Return Value

성공하면 개체에 대한 포인터입니다 CPen . 그렇지 않으면 NULL.

설명

개체가 CPen 핸들에 연결되지 않은 경우 임시 CPen 개체가 만들어지고 연결됩니다. 이 임시 CPen 개체는 다음에 애플리케이션이 이벤트 루프에서 유휴 시간을 가지며, 이때 모든 임시 그래픽 개체가 삭제될 때까지만 유효합니다. 즉, 임시 개체는 하나의 창 메시지를 처리하는 동안에만 유효합니다.

예시

// 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 대한 정보가 들어 있는 구조를 가리킵니다.

Return Value

성공하면 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 대한 정보를 포함할 구조를 가리킵니다.

Return Value

성공하면 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;

Return Value

성공하면 개체가 나타내는 Windows GDI 개체에 대한 핸들입니다 CPen . 그렇지 않으면 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 클래스