c++ - mfc RichTextBox2.0变灰

标签 c++ mfc richtextbox

我在 C++ 应用程序中使用 mfc。我有 CEdit 控件并将它们更改为 CRichEditCtrl。 App 是图形编辑器,在节点中具有内部代码,其中 TextBox 将代码保存在与 wnd with graph 不同的窗口中的对话框中。如果单击节点,则显示 wnd 和对话框(不同节点具有不同的 wnd,在不活动时隐藏)

我的问题是,如果我在那个文本框中有一些较长的文本,文本框的整个区域都是灰色的。文本仍然存在,可以通过单击鼠标设置插入符号,但在我做一些特别的事情之前什么都看不到。例如:通过鼠标单击和拖动选择文本,包含文本的行再次变为白色并且文本可见。另一种可能性是滚动,超出范围的行会很好。

我设法通过在此控件上调用 Invalidate 来解决此问题,但是:

  1. 我真的不明白为什么会这样
  2. 我已经在文本中实现了搜索和选择找到的单词,但这种变灰的情况仍然存在,而不是选择第一个文本。当在该节点和控件中选择第二个词时,整个文本框再次干净并正常工作,但当搜索结果出现和出现时,情况会重复。

在图片上,您可以看到红色字段之间的富文本框(包含控件的对话框 BG)。左边的控件是带有文本的漂亮的白色控件。右边是搜索后的相同控件,但在单击它并选择一些带有两段“未公开”代码的文本后变灰了。

关于为什么会发生这种情况和/或我怎样才能摆脱这种行为的任何建议?

Compare fine state and messed up grayed state of RichtextBox

奇怪的是,当我尝试一些解决方案时,调用 Invalidate() 使其在某些情况下表现良好,但在 invalidate 之后调用 UpdateWindow() 又把事情搞砸了。

最佳答案

好的,我终于明白了。

抱歉把事情搞砸了,看来我描述的问题并不是解决这个问题的真正线索。

我发现这一切背后的罪魁祸首是为我的文本框调用这个 CWnd 方法

SetWindowPos(&CWnd::wndBottom, 0, 0, width, height, SWP_NOMOVE);

当我使用 MoveWindow(left,top,right,bottom,repaint) 时它工作正常但是当我至少留下一个 SetWindowPos(设置一些其他控件)时它被搞砸了。

我真的不明白为什么这对 CRichEditCtrl 来说是个问题,而对 CEdit 来说还可以,所以如果你知道,请告诉我。

关于c++ - mfc RichTextBox2.0变灰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30221426/

相关文章:

c++ - 我是否必须检查此方法的指针有效性?

c++ - 错误 C1189 : #error : This file requires _WIN32_WINNT to be #defined at least to 0x0500. 建议使用值 0x0501 或更高

c++ - 在 C++ Windows 中使用 SpVoice

c# - Word-Wrap 上的 Fire 事件

.net - 修改 TextBox 控件中的字符间距/宽度

c++ - 我的 vector 在通过构造函数传递后怎么会发生变化?

c++ - "Error Opening SDF File"对于 VS2015 中的所有 C++ 项目

c++ - C++ 中特定位置映射的迭代器

c++ - MFC中OnInitDialog函数之后有没有调用什么函数?

c# - MVVM 从 VM 访问 Richtextbox 流文档