CEdit는 기본적으로 부모의 폰트를 따라가게 된다. CEdit를 수정하는 것은 부모 창에서 조절하는 방법도 있지만 일괄로 나만의 스타일을 구축하기에는 번거롭다. 그래서 Subclassing하여 스타일을 만들어 놓으면 두고두고 쓸 수 있어 유용하다.
CEdit를 Subclassing하는 CMxEdit를 만든다.
헤드 파일에 CFont 변수를 선언한 후, 생성자에 Font에 대한 데이터를 미리 넣어둔다. Set/Get 함수를 이용한 Font의 업데이트도 좋지만, 많이 사용하는 스타일로 미리 만들어 놓으면 사용 시 손이 덜가는 경우가 많다. 그리고 CEdit는 WM_CREATE 같은 이벤트가 발생하지 않기 때문에 초기화도 WM_PAINT나 WM_CTLCOLOR_REFLECT 같은 이벤트를 사용한다.
Font의 초기화와 텍스트의 색깔도을 변경하기 위해서 WM_CTLCOLOR_REFECT EVENT를 등록한다. EVENT 추가 창에는 =WM_CTLCOLOR 로 표시되어 있다. 색깔을 바꾸기 위해서는 아래와 같이 코드를 추가한다.
원래 NULL로 반환되지만, NULL로 반환하면 색깔이 바뀌지 않는다. 부모로부터 핸들을 받아서 텍스트 색깔을 바꾼 후 브러쉬를 반환하자. 그리고 SetFont를 if문으로 처리하지 않으면 커서가 한 자리에서만 엄청 빠르게 깜빡이는 것을 볼 수 있을 것이다. ( 하지 않아도 되는 걸 굳이 하지는 말자. )
CEdit의 경우는 Ready Only로 하지 않으면 배경색은 바뀌지 않는다. 안되는 거 고생하지 말자.
색깔이 완성되었다. 해당 프로젝트는 VS2015로 작성되었으며, 코드는 아래와 같다.
'코드 > MFC' 카테고리의 다른 글
[MFC] 따라하기 03. Edit box를 이용하여 여러 개의 사각형 그리기 (0) | 2022.03.02 |
---|---|
[MFC] 따라하기 02. 버튼을 이용하여 사각형 그리기/지우기 (0) | 2022.03.02 |
[MFC] 따라하기 01. 사각형 그리기 (0) | 2022.03.02 |
[MFC] CString ↔ char* 변환 (0) | 2021.04.27 |
[MFC] CString ↔ string 변환 (0) | 2021.04.26 |