Богатое форматирование элемента управления редактирования не работает, когда я компилирую в режиме отладки
У меня есть простое диалоговое приложение Win32 API, которое я написал, которое содержит богатый элемент управления редактирования. Элемент управления отображает содержимое текстовых файлов на основе ANSI и выполняет базовую подсветку синтаксиса.
Я использую Visual C++ 2010 Express для написания кода, и когда я компилирую в режиме Release, все работает отлично. Однако, когда я компилирую в режиме отладки, программа запускается, подсветка синтаксиса, кажется, происходит, но текст в элементе управления не меняет цвет.
Любые идеи о том, почему это может происходить?
РЕДАКТИРОВАТЬ: этот фрагмент кода был добавлен, чтобы показать, как я пытаюсь раскрасить текст в элемент управления 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);
}
Как я упоминал выше, когда я компилирую в режиме Release, раскраска текста работает так, как задумано. Когда я компилирую в режиме отладки, раскраска не происходит. Мне интересно, если в режиме отладки не работают определенные функции элемента управления?
1 ответ
Вы устанавливаете dwMask в CFM_COLOR, что говорит о том, что члены crTextColor и dwEffects являются действительными, но вы не инициализируете dwEffects. В режиме выпуска это, вероятно, заканчивается нулем, но в режиме отладки какое-то случайное значение флага, которое заставляет его не работать. Я бы порекомендовал сделать это так:
CHARFORMATA _token;
memset(&_token, 0, sizeof(_token));
_token.cbSize = sizeof(CHARFORMATA);
_token.dwMask = CFM_COLOR;
_token.crTextColor = color;