풍부한 편집 컨트롤이 포함 된 간단한 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);
}
위에서 언급했듯이 릴리스 모드에서 컴파일 할 때 텍스트의 색상이 의도 한대로 작동합니다. 디버그 모드로 컴파일 할 때 색칠이 발생하지 않습니다. 디버그 모드에서 컨트롤의 특정 기능이 작동하지 않는다면 궁금합니다.
질문에 대한 대답은 충분하지 않지만, 일반적으로 디버그 및 릴리스 빌드와 다른 결과를 얻는 경우 일반적으로 두 가지 설정이 서로 다르기 때문입니다. (단순히 디버그 대 아니 디버그 및 최적화 대 vs). 문제를 디버깅하기 위해 무엇을 했습니까? –
@CareyGregory 귀하의 질문에 대한 응답으로, 나는 선택 영역을 색칠하기 위해 사용하고있는 코드 스 니펫을 게시했습니다. –
릴리스 모드에서 작동하므로 게시 한 코드가 올바르게 작동하고 있어야하며 문제가있는 곳이 아닙니다. ColorSelection()을 호출하기 전에 문제가있을 가능성이 큽니다. GetHandle() 및 SendMessage() 호출이 성공합니까? 디버거의 코드를 밟아서 이러한 것들을 확인할 수 있어야합니다. –