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
대한 자세한 내용은 그래픽 개체를 참조 하세요.
상속 계층 구조
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
,RoundRect
Pie
Chord
및 멤버 함수)을 지정하는 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
구조체의 멤버는 LOGBRUSH
로 BS_SOLID
설정해야 PS_COSMETIC
합니다. 이 PS_GEOMETRIC
경우 nPenStyle
모든 멤버를 사용하여 펜의 브러시 특성을 지정해야 합니다.
nStyleCount
배열의 길이를 이중 단어 단위로 지정합니다 lpStyle
. 이 값은 0이 아닌 PS_USERSTYLE
경우 nPenStyle
0이어야 합니다.
lpStyle
이중 단어 값의 배열을 가리킵니다. 첫 번째 값은 사용자 정의 스타일에서 첫 번째 대시의 길이를 지정하고, 두 번째 값은 첫 번째 공간의 길이를 지정합니다. 이 포인터는 NULL
그렇지 않은 PS_USERSTYLE
경우 nPenStyle
여야 합니다.
설명
인수 없이 생성자를 사용하는 경우 , 또는 CreateStockObject
멤버 함수를 CPen
사용하여 결과 개체를 CreatePen
CreatePenIndirect
초기화해야 합니다.
인수를 사용하는 생성자를 사용하는 경우 더 이상 초기화가 필요하지 않습니다. 인수가 있는 생성자는 오류가 발생하는 경우 예외를 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
구조체의 멤버는 LOGBRUSH
로 BS_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_NULL
PS_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_NULL
PS_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;