问题标签 [cricheditctrl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
756 浏览

c++ - CRichEditCtrl 作为语法高亮编程语言编辑器:SetSelectionCharFormat,撤消

我正在使用 CRichEditCtrl 来编辑计算机语言,并且在每次更改时,我都会更改文本的 CharFormat 以突出显示语法。(例如:绿色注释、大字体的章节标题、不同字体的编译错误等)

一切看起来都很好。

不过也有一些奇怪的问题。一是,CRichEditCtrl 的撤消缓冲区不仅包含用户事件,还包含我对 SetSelectionCharFormat 的调用。例如,假设用户在行首键入“#”,使该行成为注释。然后软件会自动将其变为绿色。现在,当用户尝试 ctrl-z 时,线条变回黑色。另一个 ctrl-z 删除他的“#”。 如何避免 SetSelectionCharFormat() 更改进入撤消缓冲区?

0 投票
1 回答
264 浏览

c++ - CRichEditCtrl OnUpdate():收到粘贴时如何知道开始和结束位置?

我正在使用 CRichEditCtrl 来编辑计算机语言,并且在对其进行每次更改时,我都会在当前文本行(由 LineFromChar(-1) 报告)上调用 SetSelectionCharFormat 以突出显示语法。(例如:绿色的注释,大字体的部分标题,红色的编译错误等)请注意,这种语言没有多行功能,例如 C 注释,其中在一行上键入 /* 会使以下行成为也有评论;对于任何给定的字符更改,我只需要更改当前行的颜色。

一切看起来都很好。

不过也有一些奇怪的问题。一种是,当从其他地方选择多行文本并粘贴时。我的 OnUpdate() 被调用,但天真地假设唯一可能需要重新格式化的行是 LineFromChar() 返回的行。这在用户逐个字符输入时就足够了,但这意味着在收到多行粘贴后,程序只会重新格式化粘贴文本的最后一行。 它怎么知道插入的开始在哪里?

0 投票
0 回答
361 浏览

mfc - OnMouseMove 处理程序中的 CRichEditCtrl::SetRedraw() 导致无限循环

过于简单化,我的 CRichEditCtrlEx 类中有下一个 WM_MOUSEMOVE 消息处理程序,它派生自 CRichEditCtrl:

问题是 SetRedraw(TRUE) 之前是 SetRedraw(FALSE),它以某种方式在消息队列中放置了一条新的 WM_MOUSEMOVE 消息,因此 OnMouseMove 处理程序将被无限调用,即使鼠标没有移动。

为了找出问题所在,我尝试了以下简单的处理程序:

或者

但它们不会导致无限循环。

我也尝试过验证客户区,但没有帮助:

SetRedraw() 有什么问题?

任何想法将不胜感激。

UPD:我看到 WM_MOUSEMOVE 消息不仅可能是由鼠标移动引起的,有时也可能是由窗口绘图引起的。通过存储最后一个鼠标位置并检查鼠标是否真的移动可以避免无限循环,但对我来说这似乎是一种解决方法。

0 投票
1 回答
71 浏览

mfc - 如何在另一个类中引用富编辑控件

我有一个简单的 MFC 文本编辑器,我正在尝试实现查找功能。我试图从我的“查找框”对话框类中引用存储所有文本的控件(我相信这是在视图类中)。当它在另一个类中时,我如何访问这个富编辑控件?

0 投票
1 回答
292 浏览

visual-c++ - 在富编辑控件中查找下一个

以下代码可以很好地找到单词的第一次出现:

我如何找到下一个事件?

0 投票
0 回答
257 浏览

mfc - 创建透明 CRichEditCtrl

我想创建透明的 CRichEditCtrl。背景将是 CWnd。

我试过的

我尝试使用 WS_EX_TRANSPARENT。但在这种情况下,绘画是不合适的。
除此之外,我尝试了 OnCtlColor 但根本没有调用它。
SetWindowRgn 不适合我。

让我知道是否有任何方法可以使 CRichEditCtrl 透明。

0 投票
1 回答
1224 浏览

visual-studio-2010 - 如何在 CRichEditCtrl 中禁用 RTF 表格边框?

我遇到了 CRichEditCtrl 的问题。我想使用表格来格式化要显示的生成文本。在 rtf 1.5 规范中它说,我必须指定一个表格边框来显示任何但显然 CRichEditCtrl 的一些默认设置无论如何都会设置它们。

这段代码:

结果是:

输出

我尝试将单元格的边框宽度设置为 0,并将边框颜色设置为白色为 0。

或者

这两种方式都行不通。结果总是一样的。

也许这里有人知道如何禁用这个,显然,默认边框。我想禁用或隐藏这个边框。也许在控件中有一个设置,我还没有发现。

0 投票
1 回答
343 浏览

c++ - 如何更改 CRichEditCtrl 中的突出显示颜色?

我试图捕捉 EN_SelChange 事件,但它从未触发,尽管我已经添加

在 OnInitDialog fxn 中。所以我尝试在我的 OnEraseBkgnd 函数中添加以下代码。

并且程序在 GetSel 函数上崩溃了

我现在正在想办法在选择文本时更改文本突出显示颜色。

0 投票
1 回答
417 浏览

c++ - 在 CRichEditCtrl MFC 中按键后替换字符

我想重定向空格键按下动作以显示另一个字符(空白字符'·')。

我可以使用什么处理程序或 Windows 消息来执行此操作?

0 投票
2 回答
194 浏览

c++ - 在 CRichEdit 中更改使用 Alt+Unicode 插入的字符

我想更改使用键盘上的 Alt+Unicode 代码插入的 unicode char。我使用 PretranslateMessage 更改直接从键盘插入的字符并且它有效。但是对于 Alt+Unicode 代码方法,它不会。这是代码:Microsoft Word 在启用显示/隐藏段落标记时具有此功能。

如果我从键盘 Alt + 0 + 1 + 6 + 0 插入“”(无分隔符),我希望 CRichEditCtrl 显示“°”或我指定的其他字符。

我该如何处理才能使其正常工作?