Богатое форматирование элемента управления редактирования не работает, когда я компилирую в режиме отладки - PullRequest
0 голосов
/ 04 марта 2012

У меня есть написанное мной простое диалоговое приложение 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 Ответ

1 голос
/ 09 марта 2012

Вы устанавливаете dwMask в CFM_COLOR, что говорит , что оба члена crTextColor и dwEffects являются действительными, но вы не инициализируете dwEffects. В режиме выпуска это, вероятно, заканчивается нулем, но в режиме отладки какое-то случайное значение флага, которое заставляет его не работать. Я бы порекомендовал сделать это так:

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