IT News/C++

C++ MFC을 사용하여 picture control[픽처 컨트롤러]를 클릭하면 color picker [컬러픽커] 가 되도록 기능 구현

skyLove1982 2014. 10. 21. 10:36
반응형

picture control 을 클릭하면 색상을 선택하는 다이얼로그가 표시가 되고 색상을 클릭하면 해당 색상으로 변경되는 코드를 적어보았습니다. 다른 분들은 리스트 박스에 했던것 같은데 아무튼 picture control 로 해보았는데요.

  

Picture Control, Notify

 

위 그림과 같이 Toolbox 에서 Picture Control 을 선택해서 폼(Form)으로 이동시키고 속성(Properties)에서 Misc 부분에 있는 Type 속성을 Rectangle 로 바꾸었습니다. 그러면 네모난 처럼 보이구요. 색깔을 Appearance 부분의 Color 속성을 변경하시면 됩니다.

 

그러면 이제 이벤트를 주어야 하는데요. 여기서 중요한 점은 Appearance 부분에서 Notify 속성을 True 로 해주어야 합니다. 왜냐하면 Notify 속성이 True 가 되어야 이벤트가 동작하도록 할 수 있기 때문입니다.

 

Add Event Handler

 

위의 그림과 같이 Picture Control 에서 마우스 오른쪽 클릭하고 Add Event Handler 를 선택합니다. 그러면  Event Handler Wizard가 실행이 됩니다.

 

Event Handler Wizard

 

그리고 위의 그림과 같이 Message Type 를 원하는 이벤트에 맞게 선택하고 Add and Edit 를 선택하면 이벤트가 추가가 됩니다.

 

그리고 한가지 더~ 새롭게 추가된 이벤트에 사용하기 위해서 picture control 에 변수 이름을 주어야 하는데요. 폼에서 picture control 을 선택하고 마우스 오른쪽 누르고 Add Variable 을 선택합니다.

Add Variable

 

그러면 아래 이미지와 같이 Add Member Variable Wizard 가 표시가 되는데요. Control ID는 Properties 를 눌렀을때에 Misc 부분의 ID 속성을 변경해주시면 됩니다.

Add Member Variable Wizard

 

참고로 저는 변수 이름을 m_color_picker_box 로 선언했습니다.

 

그러면 이제 아까 생성된 이벤트 함수 부분으로 들어가서 구현을 해보면 아래와 같습니다.

 

CColorDialog 예제 코드

여기서 COLORREF 타입은 RGB 값을 하나의 정수값으로 표현한 값이라 쉽게 생각하면 될것 같습니다. 그리고 GETRValue 함수를 통해서 R 값을.. 그리고 그 외의 함수를 통해서 G 또는 B 값을 얻을 수가 있습니다. 여기서는 COLORREF 값을 사용하는데요. 아무튼 m_color_picker_box 라는 변수는 아까 위에서 picture control 의 이름을 지정한 것이구요. 거기에 DC 값을 얻어오고 선택한 컬러값을 가지고 브러쉬(CBrush)를 생성하고 영역(CRect)을 만들어서 색을 칠하게 됩니다.(FillRect) 그리고 마지막으로 DC를 릴리즈 하게 됩니다.

 

이 부분이 핵심이구요. 색상을 선택하는 창은 간단히 CColorDialog 를 호출함으로써 간단하게 구현이 가능하게 되었습니다. 이게 MFC 의 장점이긴 하지만요. 아무튼 설명이 많이 미흡하지만 이만 글을 마칩니다^^

 

반응형