在调试模式下编译时,丰富的编辑控件格式不起作用

时间:2012-03-04 17:42:41

标签: c++ visual-studio-2010 debugging winapi richedit

我有一个简单的Win32 API基于对话框的应用程序,我写了它包含一个丰富的编辑控件。该控件显示基于ANSI的文本文件的内容,并执行一些非常基本的语法突出显示。

我使用Visual C ++ 2010 Express编写代码,当我在Release模式下编译时,一切都很完美。但是,当我在调试模式下编译时,程序运行,语法突出显示似乎正在发生,但控件中的文本不会改变颜色。

关于为什么会发生这种情况的任何想法?

编辑:添加了这段代码,以显示我如何为富编辑控件中的文本着色。

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);
}

正如我上面提到的,当我在发布模式下编译时,文本的颜色按预期工作。当我在调试模式下编译时,不会发生着色。我想知道在调试模式下,如果控件的某些功能不起作用吗?

1 个答案:

答案 0 :(得分:1)

您正在将dwMask设置为CFM_COLOR,says crTextColor和dwEffects成员都有效,但您没有初始化dwEffects。在发布模式下,它可能最终为零,但在调试模式下会出现一些随机标志值,导致它无法正常工作。我建议这样做:

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