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 를 꺼준다.
'컴퓨터 > MFC_API' 카테고리의 다른 글
CRichEditCtrl 에서 유니코드 표시 (0) | 2014.05.02 |
---|---|
CRichEditCtrl 에서 줄바꿈 없애기 (0) | 2014.04.11 |
파일 끌어 놓기 구현 (drag & drop)DragAcceptFiles(); (0) | 2014.01.03 |
글자의 크기를 알아 오기 - GetTextExtent (0) | 2013.01.13 |
unicode 와 ansi, std::string 과 CString 상호 변경하기 (3) | 2013.01.07 |