2013-10-15 3 views
1


색칠 된 텍스트 줄을 RichEdit 컨트롤에 추가하고 싶습니다. 하지만 나는 colorchange가 내가 선택한 텍스트에만 국한되지 않는다는 문제에 직면 해있다. 내가 뭘하는지 :
현재 커서 위치 가져 오기 -> 텍스트 삽입 -> 커서 위치 가져 오기 -> 범위 선택 -> 색상 선택 -> 선택 취소
어떤 이유로 기본 색상도 변경되는 것 같습니다. 나는 그 선을 착색 한 후에 구 CHARFORMAT을 저장하고 그것을 복원하려고 시도했는데 (마지막 문자로 SCF_DEFAULTSCF_SELECTION), 작동하지 않았다. 내가 놓친 게 있니?

선택 항목의 리치 헷드 변경 색상

내가있어 RichEdit의 2.0 다음과 같은 기능 :

hEdit_Console = CreateWindow(RICHEDIT_CLASS, "", 
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOVSCROLL | ES_MULTILINE | ES_READONLY | WS_VSCROLL, 
10, 100, 260, 120, hWnd, NULL, ((LPCREATESTRUCT) lParam)->hInstance, NULL); 
SendMessage(hEdit_Console, WM_SETFONT, (LPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE); 


void AddInfo2(HWND con, char* text) 
{ 
    CHARFORMAT cf; 
    int start, stop; 

    memset(&cf, 0, sizeof cf); 
    cf.cbSize = sizeof cf; 
    cf.dwMask = CFM_COLOR; 
    cf.crTextColor = RGB(51, 204, 51); 

    SendMessage(con, EM_SETSEL, -1, -1); 
    start = SendMessage(con, WM_GETTEXTLENGTH, 0, 0); 
    SendMessage(con, EM_REPLACESEL, FALSE, (LPARAM)text); 
    stop = SendMessage(con, WM_GETTEXTLENGTH, 0, 0); 
    SendMessage(con, EM_SETSEL, start, stop); 
    SendMessage(con, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf); 
    SendMessage(con, EM_SETSEL, -1, -1); 
} 

답변

0

적어도 나를 위해 작동하는 해결 방법을 발견했습니다. 예전에 CHARFORMAT을 저장/백업하고 복원하려고 시도했을 때 CHARFORMAT cf_oldCFM_COLOR을 지정하지 않고 수행했습니다. 지금은 사용 : 내 첫 번째 시도가 작동하지 않는 이유

SendMessage(con, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf_old); 
cf_old.dwMask = CFM_COLOR; 
SendMessage(con, EM_SETSEL, -1, -1); 
SendMessage(con, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf); 
SendMessage(con, EM_REPLACESEL, FALSE, (LPARAM)text); 
SendMessage(con, EM_SETSEL, -1, -1); 
SendMessage(con, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &cf_old); 

그것은 어떻게 든 설명합니다. Richydit에 처음으로 의 CHARFORMAT을 추가 할 때마다 앞에 캐럿이 사용 된 것으로 보입니다.

+0

필자의 관점에서 당신은 아무것도 바꾸지 않았다. 그러나 당신은 이제 잘 초기화 된 구조를 가지고있다. – xMRi

2

지금까지 내가가 CFE_AUTOCOLOR 또는 다른 유효로 설정해야합니다 documentationdwEffects을 읽으면서 값.

+0

crTextColor (같은 페이지)에 관한 문서 : 텍스트 색상. 이 멤버는 CFE_AUTOCOLOR 문자 효과가 지정된 경우 무시됩니다. COLORREF를 생성하려면 RGB 매크로를 사용하십시오. - dwEffects가 0이므로 추가 스타일이 텍스트에 적용되지 않습니다. 어쨌든 고맙습니다. –

+0

. 솔루션/해결 방법에 대해 올바른 방향으로 나를 지적했습니다. –