2012-03-04 4 views
0

풍부한 편집 컨트롤이 포함 된 간단한 Win32 API 대화 상자 기반 응용 프로그램이 있습니다. 이 컨트롤은 ANSI 기반 텍스트 파일의 내용을 표시하고 아주 기본적인 구문 강조를 수행합니다.디버그 모드로 컴파일 할 때 리치 편집 컨트롤 형식이 작동하지 않습니다.

저는 Visual C++ 2010 Express를 사용하여 코드를 작성하고 릴리스 모드에서 컴파일하면 모든 것이 완벽하게 작동합니다. 그러나 디버그 모드로 컴파일 할 때 프로그램이 실행되고 구문 강조 표시가 발생하지만 컨트롤의 텍스트 색이 변경되지 않습니다.

왜 이런 일이 벌어지고 있는지에 대한 아이디어가 있으십니까?

EDIT :이 코드 스 니펫을 추가하여 rich edit 컨트롤에서 텍스트의 색상을 지정하는 방법을 보여줍니다.

CHARFORMATA _token; // This variable is actually a member variable. 
        // I just pasted it in the body of the function 
        // so the code would make sense. 

// _control is a pointer to a rich edit control object. I created a 
// REdit class that adds member variables for a rich edit control. 
// The class contains an HWND member variable storing the window 
// handle. The method GetHandle() returns the window handle. 

void SyntaxHighlighter::ColorSelection(COLORREF color) 
{ 
    CHARFORMATA _token; 
    _token.cbSize = sizeof(CHARFORMATA); 
    _token.dwMask = CFM_COLOR; 
    _token.crTextColor = color; 
    SendMessageA(_control->GetHandle(), EM_SETCHARFORMAT, 
       (WPARAM)SCF_SELECTION, (LPARAM)&_token); 
} 

위에서 언급했듯이 릴리스 모드에서 컴파일 할 때 텍스트의 색상이 의도 한대로 작동합니다. 디버그 모드로 컴파일 할 때 색칠이 발생하지 않습니다. 디버그 모드에서 컨트롤의 특정 기능이 작동하지 않는다면 궁금합니다.

+0

질문에 대한 대답은 충분하지 않지만, 일반적으로 디버그 및 릴리스 빌드와 다른 결과를 얻는 경우 일반적으로 두 가지 설정이 서로 다르기 때문입니다. (단순히 디버그 대 아니 디버그 및 최적화 대 vs). 문제를 디버깅하기 위해 무엇을 했습니까? –

+0

@CareyGregory 귀하의 질문에 대한 응답으로, 나는 선택 영역을 색칠하기 위해 사용하고있는 코드 스 니펫을 게시했습니다. –

+0

릴리스 모드에서 작동하므로 게시 한 코드가 올바르게 작동하고 있어야하며 문제가있는 곳이 아닙니다. ColorSelection()을 호출하기 전에 문제가있을 가능성이 큽니다. GetHandle() 및 SendMessage() 호출이 성공합니까? 디버거의 코드를 밟아서 이러한 것들을 확인할 수 있어야합니다. –

답변

1

dwMask를 CFM_COLOR로 설정합니다.이 경우 says은 crTextColor 및 dwEffects 멤버가 모두 유효하지만 dwEffects를 초기화하지 않습니다. 릴리스 모드에서는 아마도 0이되지만 디버그 모드에서는 작동하지 않게하는 임의의 임의의 플래그 값이됩니다. 나는 이렇게하는 것이 좋습니다 :

CHARFORMATA _token; 
memset(&_token, 0, sizeof(_token)); 
_token.cbSize = sizeof(CHARFORMATA); 
_token.dwMask = CFM_COLOR; 
_token.crTextColor = color; 
+0

그게 다야! 마침내! 이 문제와 관련하여 계속 답변을 해주셔서 대단히 감사합니다. 왜 dwEffects를 0으로 설정하는 것이 내 마음에 들지 않는지 나는 모른다. (= –

+0

그런 작은 세부 사항을 간과하기 쉽습니다. 초기화하기 전에 구조체를 0으로 만드는 습관을 짓고 전달합니다. 많은 버그를 피하는 습관이라고 생각합니다. –