ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 활용 - 그림판 만들기
    Win API/4. GDI 2021. 4. 2. 22:28

    개발 환경은 Visual Studio 2008

    아래의 내용에서 마우스를 이용해서 그림 그리는 내용을 가지고 와서 만들 것이다.

    designatedroom87.tistory.com/420?category=937044

     

    MoveToEx & LineTo 함수를 이용한 선 그리기

    개발 환경은 Visual Studio 2008 위의 두 함수를 이용해서 간단한 직선을 그려 보자. 프로그램 실행결과 소스 파일 이번에는 마우스를 활용해서 그림을 그려보자. 마우스가 눌려있는 상태에서 마우스

    designatedroom87.tistory.com

     

     

    아래와 같이 UI를 만들도록 하자.

    왼쪽 영역은 그림을 그릴 공간이며, 오른쪽의 각 각의 폰트 정보 리스트 박스에서 목록을 선택하면

    그에 맞게 폰트의 정보를 변경하면 된다.

     

     

     

     

     

     

     

    프로그램 실행결과

     

     

    소스 파일

    WinMain.cpp
    0.01MB

     

     

     

    그림을 그리고 난 다음에, 그린 그림을 지우는 버튼을 하나 만들도록 하자.

    아래와 같이 지우기 버튼을 하나 만들자.

    우선 기존에 폰트 색상 리스트 박스의 세로 크기를 약간 작게 조절하자.

     

    아래에서 지우기 버튼에 대한 ID를 열거자에 추가한다.

     

    지우기 버튼을 저장히기 위한 전역 변수이다.

     

    WM_CREATE 메시지에서 지우기 버튼을 생성하고 기존의 폰트 색상 체크 박스의 세로 크기를 줄인다.

     

    지우기 버튼이 눌리면 InvalidateRect 함수를 호출 한다.

     

    소스 파일

    WinMain.cpp
    0.01MB

     

     

     

    우리는 위에서 폰트의 색상을 리스트 박스의 목록에서만 선택을 했는데,

    색상을 선택할 수 있는 폭이 너무 아쉽다.

    색상의 RGB 값을 우리가 원하는 수로 입력을 해서 그에 맞는 색상으로 폰트를 설정하도록 만들어 보자.

    우선 아래의 UI를 먼저 보자.

    왼쪽 큰 영역은 그림을 그릴 영역의 테두리를 설정하였고

    우측 중단과 하단은 우리가 R,G,B의 값을 입력하고 선택 버튼을 누르면 폰트의 색상이 변경되고

    하단의 직사각형에는 설정된 컬러로 변경된다.

    현재 Default 색상은 검은색이므로 직사각형의 색상은 검정색이다.

    직사각형의 색상을 입히는 부분은 WM_PAINT 메시지에서 처리를 한다.

    WM_PAINT 메시지가 호출이 되기 위해서는 InvalidateRect 함수를 호출하여야 하는데

    이는 색상이 설정되는 부분에서 호출되면 된다.

    그리고 나머지 컨트롤에서는 크기 및 위치를 조금씩 변경을 하였다.

     

    열거자에 색상 팔레트에 대한 정보를 추가한다.

    이 RGB의 값을 입력받는 부분은 모두 에디트 박스로 만들 것이다.

     

    아래는 필요한 변수를 모두 전역 변수로 두었다.

     

    아래의 내용은 WM_CREATE 메시지 내의 추가된 부분이다.

    아래는 그림 그릴 영역의 테두리를 만드는 내용이다.

    아래는 색상 팔레트 및 색상 선택 버튼을 만드는 부분이다.

     

    아래는 R,G,B의 에디트 박스에 색상 값이 입력된 경우이다.

    R,G,B의 값들은 모두 문자열로 저장되어있으므로, 이를 정수로 변환해야 한다. 

     

    아래는 위의 에디트 박스에 색상이 모두 입력된 후에, 해당 색상을 저장하는 역할을 한다.

    아래에서는 예외처리를 하지 않았다.

    각 R,G,B의 값이 0에서 255사이의 값인지 확인을 해야 한다.

     

    아래의 내용은 폰트 색상 리스트 박스의 색상이 선택되었을 때의 부분인데

    여기서는 InvalidateRect 함수의 호출을 추가했다.

    그 이유는, 색상의 변경이 발생했을 때, 직사각형의 색상을 변경된 색으로 변경하기 위함이다. 

     

    아래는 WM_PAINT 메시지의 내용이다.

     

    프로그램 실행결과

     

    소스 파일

    WinMain.cpp
    0.01MB

     

     

     

    이번에는 폰트의 색상을 RGB의 각 입력 값을 받아 폰트를 색상을 설정했는데,

    이는 내가 사용하려는 색상의 값을 알고 있어야 사용할 수 있기 때문에 불편하다.

    그래서 아래와 같이 실제 그림판 같이 픽셀을 보여주고 이 색상 픽셀을 클릭했을 때 

    해당 색상으로 폰트 색상을 변경하도록 하자.

    GetPixel 함수와 SetPixel 함수를 이용해서 이를 처리할 수 있다.

     

    마우스 왼쪽이 클릭되었을 때, 픽셀의 색상을 저장하면 된다.

    그런데 한 가지 예외 처리를 하는 부분이 있는데 이는 픽셀의 위치가 위의 픽셀 영역이어야 한다. 

    픽셀 색상을 가지고 오면 InvalidateRect 함수를 호출해서 WM_PAINT 메시지를 발생시켜

    직사각형의 색상을 변경하도록 하자.

     

    아래의 WM_PAINT 메시지에서는 SetPixcel 함수를 이용해서 색상을 표현하자. 

     

    프로그램 실행결과

     

     

    소스 파일

    WinMain.cpp
    0.01MB

    댓글

Designed by Tistory.