Windows 프로그램 설계 - 붓 및 브러시
Windows에서 제공하는 3가지 예비 펜(stock pen)
흰색 붓: WHITEPEN 검은색 붓: BLACKPEN//기본 붓입니다 빈 붓: NULLPEN
붓을 사용하려면 다음과 같은 몇 가지 함수가 필요합니다.
//미리 정의된 예비 펜, 브러시, 글꼴, 팔레트의 핸들을 가져옵니다//HGDIOBJ는 GDI 대상의 핸들입니다
HGDIOBJ GetStockObject(
int fnObject //
);
//이 함수는 지정된 장치 상하문 환경에 대상을 선택하고 이전의 같은 유형의 대상을 새 대상으로 바꿉니다.
HGDIOBJ SelectObject(
HDC hdc, //
HGDIOBJ hgdiobj //
);
이것은 hPen=SelectObject(hDc, GetStockObject(WHITE PEN) 등 이전에 선택한 DC의 핸들을 되돌려줍니다.현재 hPen의 색상은 BLACK 입니다.PEN, 현재 WHITEPEN.
//객체 핸들 삭제
BOOL DeleteObject(
HGDIOBJ hObject //
);
붓을 사용하려면 설비 환경에 이 붓을 선택해야 한다.
예를 들면 다음과 같습니다.
HPEN hPen=nullptr;//
hPen=(HPEN)GetStockObject(WHITE_PEN);//
SelectObject(hDc,hPen);//
[ ]
DeleteObject(hPen);
사용자 정의 붓 만들기: 붓, 브러시, 비트맵, 영역, 글꼴, 팔레트는 모두 GDI 대상이며, 이 대상을 사용하려면 장치 환경에 선택해야 합니다
다음과 같은 함수를 사용합니다.
//논리 붓을 만듭니다//논리 붓 핸들을 되돌려줍니다. 그렇지 않으면 NULL로 되돌려줍니다.
HPEN CreatePen(
int fnPenStyle, // , MSDN
int nWidth, // ( )
COLORREF crColor //
);
예를 들면 다음과 같습니다.
//
hPen = CreatePen(PS_SOLID, 4, RGB(255,255,0));
SelectObject(hdc, hPen);//
MoveToEx(hdc, 10, 10, nullptr);
LineTo(hdc, 200, 200);
EndPaint(hwnd, &ps);
DeleteObject(hPen);//
논리 화필 정보 구조
typedef struct tagLOGPEN {
UINT lopnStyle; //
POINT lopnWidth; // , x,y
COLORREF lopnColor; //
} LOGPEN, *PLOGPEN;
논리 붓 만들기
HPEN CreatePenIndirect(
CONST LOGPEN *lplgpn //
);
예를 들면 다음과 같습니다.
POINT pt[1] = {0};
HPEN hPen = nullptr;
//
LOGPEN logpen = {0};
[ ]
//
pt[0].x= 4;
logpen.lopnStyle = PS_SOLID;//
logpen.lopnWidth = pt[0];
logpen.lopnColor = RGB(255, 255, 0);
hPen = CreatePenIndirect(&logpen);
SelectObject(hdc, hPen);
MoveToEx(hdc, 10, 10, nullptr);
LineTo(hdc, 200, 200);
EndPaint(hwnd, &ps);
DeleteObject(hPen);
//지정된 대상 핸들에 대한 정보 얻기
int GetObject(
HGDIOBJ hgdiobj, //
int cbBuffer, //
LPVOID lpvObject // ,
);
예를 들면 다음과 같습니다.
POINT pt[1] = {0};
HPEN hPen = nullptr;
LOGPEN logpen = {0};
//
DWORD iLength = 0;
//
WCHAR SZBuffer[100] = { 0 };
hPen = CreatePen(PS_SOLID, 4, RGB(255, 255, 0));
SelectObject(hdc, hPen);
// hPen
GetObject(hPen, sizeof(LOGPEN), &logpen);
// logpen
iLength = wsprintfW(SZBuffer, TEXT("logpen.lopnStyle =%u logpen.lopnWidth=%u logpen.lopnColor = %u"),logpen.lopnStyle,logpen.lopnWidth,logpen.lopnColor);
TextOut(hdc, 200, 200, SZBuffer, iLength);
MoveToEx(hdc, 10, 10, nullptr);
LineTo(hdc, 200, 200);
EndPaint(hwnd, &ps);
DeleteObject(hPen);
//현재 장치 환경에 선택된 브러시 핸들 HGDIOBJ GetCurrentObject(HDC hdc,//장치 환경 핸들 UINT uObjectType//객체 유형) 가져오기
hPen=GetCurrentObject(hDc,OBJ_PEN);
이어서 브러시까지.
Windows에서 제공하는 6가지 스페어 브러시(stock brush)
화이트 브러시: WHITEBRUSH 연회색 브러시: LTGRAYBRUSH, 회색 브러시:GRAYBRUSH, 짙은 회색 브러시: DKGRAYBRUSH, 검은색 브러시: BLACKBRUSH 빈 브러시: NULLBRUSH(HOLLOW BRUSH라고도 함)
그 원리는 화필과 같아서 더 이상 말하지 않겠다.주의해야 할 것은 여기의 DC를 선택한 브러시와 창류의 배경 브러시가 다르다는 것이다. 여기의 브러시는 어떤 도형을 그릴 때 그 브러시의 색깔을 자동으로 채운다.
사용자 정의 브러시를 만드는 방법도 펜과 같습니다.
//논리 브러시 만들기
HBRUSH CreateSolidBrush(
COLORREF crColor //
);
//음영선이 있는 브러시 만들기
HBRUSH CreateHatchBrush(
int fnStyle, //
COLORREF clrref //
);
//논리 브러시 정보 구조
typedef struct tagLOGBRUSH {
UINT lbStyle; //
COLORREF lbColor; //
LONG lbHatch; //
} LOGBRUSH, *PLOGBRUSH;
//논리 브러시 만들기
HBRUSH CreateBrushIndirect(
CONST LOGBRUSH *lplb // LOGBRUSH
);
예를 들면 다음과 같습니다.
hPen = CreatePen(PS_SOLID, 4, RGB(255, 255, 0));
SelectObject(hdc, hPen);
//
logbrush.lbStyle = BS_SOLID;
//
//logbrush.lbStyle = BS_HATCHED;
logbrush.lbHatch = HS_CROSS;
logbrush.lbColor = RGB(255, 255, 0);
hBrush = CreateBrushIndirect(&logbrush);
SelectObject(hdc, hBrush);
//
Rectangle(hdc, 100, 100, 300, 300);
붓과 브러시는 기본적으로 이렇게 사용했고 브러시도 있는데 이것은 뒤에 쓰는 내용이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
제한된 크기의 디렉토리를 만드는 방법오늘 저는 장치에 공간이 없을 때 백업 중에 응용 프로그램이 어떻게 작동하는지 테스트(및 수정)하는 작업이 있습니다. 결과적으로 "남은 공간 없음"오류로 백업이 실패하면 새 파일이 없어야 합니다. 지금까지 문제를 재...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.