코드/MFC

[MFC] CEdit : 폰트와 텍스트 색깔 바꾸기 (예제)

야곰야곰+책벌레 2021. 5. 19. 18:58
728x90
반응형

  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로 작성되었으며, 코드는 아래와 같다.

MyEdit (20210519).zip
0.13MB

728x90
반응형