c++ - 当我在 Debug模式下编译时,丰富的编辑控件格式不起作用

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

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

我正在使用 Visual C++ 2010 Express 编写代码,当我在 Release 模式下编译时,一切正常。然而,当我在 Debug模式下编译时,程序运行时,语法突出显示似乎正在发生,但控件中的文本没有改变颜色。

关于为什么会发生这种情况有什么想法吗?

编辑:添加这段代码是为了展示我是如何尝试为富编辑控件中的文本着色的。

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 模式下编译时,文本的颜色按预期工作。当我在 Debug模式下编译时,着色不会发生。我想知道是否在 Debug模式下,控件的某些功能是否不起作用?

最佳答案

您正在将 dwMask 设置为 CFM_COLOR,这 says crTextColor 和 dwEffects 成员都有效,但您没有初始化 dwEffects。在 Release模式下,它可能以零结束,但在 Debug模式下,一些随机标志值导致它无法工作。我建议这样做:

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

关于c++ - 当我在 Debug模式下编译时,丰富的编辑控件格式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9557282/

相关文章:

c# - 在包含对象的数组中查找最低索引?

javascript - AngularJS 模块不加载

c++ - Visual Studio 。调试。如何将变量在运行期间拥有的所有值保存到文件中?

c++ - 不同的模板类实现但相同的成员函数

c++ - Visual Studio 2010 调试 "if (var == NULL)"未触发

c++ - SSE:如何将 _m128i._i32[4] 减少到 _m128i._i8

c# - #if DEBUG 在我的 VS 2010 中似乎不起作用

windows - 如何在 Windows 上调试 Rust 单元测试?

c++ - 创建自定义数据类型 C++

c++ - 如何在 vscode 中禁用 C++17 可用的结构化绑定(bind)的警告?