Windows 프로그램 설계 - 붓 및 브러시

붓과 브러시는 중요한 GDI 대상이다. 어떤 그림을 그리든지 붓과 브러시가 필요하기 때문이다. 비록 대부분의 경우 시스템이 기본적으로 사용하지만.
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);

붓과 브러시는 기본적으로 이렇게 사용했고 브러시도 있는데 이것은 뒤에 쓰는 내용이다.

좋은 웹페이지 즐겨찾기