我在C ++应用程序中使用mfc。我有CEdit控件并为CRichEditCtrl更改了它们。 应用程序是图形编辑器,其中包含节点中的内部代码,其中TextBox将窗口中的代码保存在与wnd和图形不同的窗口中。如果单击节点,则显示该wnd和对话框(不同的节点具有不同的wnds并在非活动时隐藏)
我的问题是,如果我在该文本框中有一些较长的文本,则文本框的整个区域将显示为灰色。文本仍然存在,可以通过鼠标单击设置插入符号,但在我做一些特殊操作之前,没有任何内容可见。例如:通过鼠标单击并拖动选择文本,包含文本的行再次为白色且文本可见。其他可能性是滚动,超出范围的线条会很好。
我设法通过在此控件上调用Invalidate来解决此问题,但是:
在图片上,您可以看到红色字段之间的富文本框(保存控件的对话框的BG)。在左侧,控件是带有文本的漂亮的白色控件。右边是搜索后的相同控件,但是灰色并点击进入并选择一些带有两个“未显示”代码的文本。
为什么会发生这种情况和/或我如何摆脱这种行为?
奇怪的是,当我尝试使用某些解决方案时,调用Invalidate()使其在某些情况下表现良好,但在使无效混乱之后再调用UpdateWindow()。
答案 0 :(得分:0)
好的,我终于明白了。
在这里乱搞东西,看起来像我描述的问题并不是解决这个问题的真正线索。
我在为文本框调用此CWnd方法时找到了所有这些背后的琐事
SetWindowPos(&CWnd::wndBottom, 0, 0, width, height, SWP_NOMOVE);
当我使用MoveWindow(left,top,right,bottom,repaint)
时,它工作正常,但当我至少留下一个SetWindowPos(设置其他控件)时,它被搞砸了。
我真的不明白为什么CRichEditCtrl这个问题对于CEdit来说是好的,所以如果你认识那些人,请告诉我。