본문 바로가기
컴퓨터/MFC_API

CRichEditCtrl 에서 바탕색/글자색 설정하기

by adnoctum 2014. 4. 10.




   MFC 에서 CRichEditCtrl 의 instance 를 사용할 때 배경색 혹은 글자색을 지정했는데 변경되지 않으면 다음을 확인해 본다. 즉, format 에서 CFE_AUTOBACKCOLOR 이나 CFE_AUTOCOLOR 가 설정되어 있는지 아닌지를 확인해 보는 것이다. 





rec.SetSel(start_pos + i, start_pos+ line_length);  * //rec.GetSelectionCharFormat(cf);  //cf.crTextColor = RGB(255,255,0);  * cf.dwMask |= CFM_BACKCOLOR;

* cf.dwEffects &= ~CFE_AUTOBACKCOLOR;  * cf.crBackColor = (type == 1 ? RGB(255,0,0) : RGB(0,0,255));  rec.SetSel(start_pos + i, start_pos+ i + 1);  rec.SetSelectionCharFormat(cf); 


(위에서 * 표시가 된 line 이 중요하다) 


즉, CHARFORMAT2 형의 변수를 이용해서 옵션을 지정하거나 혹은 나의 경우 주로 기존 영역을 선택해서 그 부분에 대한 format 을 얻어 와서 원하는 값만 변경해서 사용하는데, 그 때 dwMask 나 dwEffects 값을 위처럼 변경해 주어야 하는 것이다. 즉, 


dwMask 는 CHARFORMAT2 중 valid 한 member 를 지정해 주고, 

dwEffects 는 valid 한 character effects 를 설정해 준다. 


만약 dwMask 값 중 CFM_BACKCOLOR 에 해당하는 bit 가 0 이면 crBackColor 값이 무시된다. 또한 dwEffects 값 중 CFE_AUTOBACKCOLOR 에 해당하는 bit 가 1 이면 crBackColor 가 무시가 된다. 이런 식으로 dwMask 와 dwEffects 값에 의해 CHARFORMAT2 중 사용할 member 가 결정이 된다. 따라서 crBackColor 값을 자신이 원하는 색으로 지정하기 위해선 위처럼 일단 dwMask 값에서 CFM_BACKCOLOR 에 해당하는 bit 를 켜주고(1로 해주고) dwEffects 값에서 CFE_AUTOBACKCOLOR 에 해당하는 bit 를 꺼준다. 




참고: MSDN 의 CHARFORMAT2 설명