picture control 을 클릭하면 색상을 선택하는 다이얼로그가 표시가 되고 색상을 클릭하면 해당 색상으로 변경되는 코드를 적어보았습니다. 다른 분들은 리스트 박스에 했던것 같은데 아무튼 picture control 로 해보았는데요.
위 그림과 같이 Toolbox 에서 Picture Control 을 선택해서 폼(Form)으로 이동시키고 속성(Properties)에서 Misc 부분에 있는 Type 속성을 Rectangle 로 바꾸었습니다. 그러면 네모난 처럼 보이구요. 색깔을 Appearance 부분의 Color 속성을 변경하시면 됩니다.
그러면 이제 이벤트를 주어야 하는데요. 여기서 중요한 점은 Appearance 부분에서 Notify 속성을 True 로 해주어야 합니다. 왜냐하면 Notify 속성이 True 가 되어야 이벤트가 동작하도록 할 수 있기 때문입니다.
위의 그림과 같이 Picture Control 에서 마우스 오른쪽 클릭하고 Add Event Handler 를 선택합니다. 그러면 Event Handler Wizard가 실행이 됩니다.
그리고 위의 그림과 같이 Message Type 를 원하는 이벤트에 맞게 선택하고 Add and Edit 를 선택하면 이벤트가 추가가 됩니다.
그리고 한가지 더~ 새롭게 추가된 이벤트에 사용하기 위해서 picture control 에 변수 이름을 주어야 하는데요. 폼에서 picture control 을 선택하고 마우스 오른쪽 누르고 Add Variable 을 선택합니다.
그러면 아래 이미지와 같이 Add Member Variable Wizard 가 표시가 되는데요. Control ID는 Properties 를 눌렀을때에 Misc 부분의 ID 속성을 변경해주시면 됩니다.
참고로 저는 변수 이름을 m_color_picker_box 로 선언했습니다.
그러면 이제 아까 생성된 이벤트 함수 부분으로 들어가서 구현을 해보면 아래와 같습니다.
여기서 COLORREF 타입은 RGB 값을 하나의 정수값으로 표현한 값이라 쉽게 생각하면 될것 같습니다. 그리고 GETRValue 함수를 통해서 R 값을.. 그리고 그 외의 함수를 통해서 G 또는 B 값을 얻을 수가 있습니다. 여기서는 COLORREF 값을 사용하는데요. 아무튼 m_color_picker_box 라는 변수는 아까 위에서 picture control 의 이름을 지정한 것이구요. 거기에 DC 값을 얻어오고 선택한 컬러값을 가지고 브러쉬(CBrush)를 생성하고 영역(CRect)을 만들어서 색을 칠하게 됩니다.(FillRect) 그리고 마지막으로 DC를 릴리즈 하게 됩니다.
이 부분이 핵심이구요. 색상을 선택하는 창은 간단히 CColorDialog 를 호출함으로써 간단하게 구현이 가능하게 되었습니다. 이게 MFC 의 장점이긴 하지만요. 아무튼 설명이 많이 미흡하지만 이만 글을 마칩니다^^
'IT News > C++' 카테고리의 다른 글
c++ 바이러리로 이미지 복사하기 visual studio 2008 (0) | 2015.01.22 |
---|---|
visual studio 2008 (다이얼로그 탭 순서 변경) dialog tap order change (0) | 2014.10.10 |
[C++ 소스] 파일 멀티 선택 (0) | 2014.09.01 |