我编写了一个简单的基于Win32 API对话的应用程序,其中包含丰富的编辑控件。该控件显示基于ANSI的文本文件的内容,并进行一些非常基本的语法高亮显示。
我使用Visual C++2010学习版编写代码,当我在发布模式下编译时,一切都很完美。但是,当我在调试模式下编译时,程序运行,语法高亮显示似乎正在发生,但控件中的文本不会改变颜色。
有什么关于为什么会发生这种情况的想法吗?
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);
}
正如我上面提到的,当我在发布模式下编译时,文本的颜色会按预期工作。当我在调试模式下编译时,着色不会发生。我想知道在调试模式下,控件的某些功能是否不起作用?
您将dwMask设置为CFM_COLOR,这表示crTextColor和dwEffects成员都是有效的,但您没有初始化dwEffects。在发布模式下,它可能最终为零,但在调试模式下,一些随机标志值导致它无法工作。我建议这样做:
CHARFORMATA _token;
memset(&_token, 0, sizeof(_token));
_token.cbSize = sizeof(CHARFORMATA);
_token.dwMask = CFM_COLOR;
_token.crTextColor = color;