【问题标题】:Squigglly line under a word (Win32)单词下的波浪线(Win32)
【发布时间】:2010-04-24 07:24:26
【问题描述】:

我想在我正在做的记事本克隆项目中实现基本的拼写检查。我想像 Word 一样用波浪线在拼写错误的单词下划线。我想我需要使用 GDI 并在文本字段上绘图,但我不确定如何在控件上绘图。 谢谢

【问题讨论】:

  • 强烈推荐scintilla.org :) 不确定它是否专门让你做曲线。

标签: c++ winapi gdi+


【解决方案1】:

如果您的编辑器基于编辑控件(如记事本所做的那样),那么我认为这会很困难。通过子类化编辑控制窗口,您可能会增加它的WM_PAINT 处理。但问题是该控件并没有为您提供一种方法来准确找出单词在控件中出现的位置。因此,您将不知道在哪里绘制曲线。

您也许可以使用 Rich Edit 控件(就像写字板一样)并调整拼写错误单词的样式。我从未使用过 Rich Edit,因此无法提供详细信息。

【讨论】:

    【解决方案2】:

    实际上,我不确定您用于在窗口中呈现文本的方法,我认为您需要具体化它。

    如果一切都是使用 winapi/gdi 完成的(一般来说,这将是 TextOuting 当前文本块,适合考虑换行的窗口等...),您应该添加另一个例程来处理拼写错误文字渲染。

    同样,这也取决于您保存当前文本及其参数的方式,但我们的想法是实现某种功能,例如 RenderMisspelledWord(...),这将采用您的通用 文本处理类或某种 renderer class 甚至 (X, Y, Length) 作为参数。该函数将从更通用的Render 方法调用,该方法将从WM_PAINT 处理程序调用。

    它会做什么也取决于您的记事本架构,但是,例如,在最后一种情况下,需要使用 GDI(线)绘制 * /\ /\ /\ * 部分下划线例行公事。

    一般来说,所有其他情况(带有处理类)也会导致以下操作,但具有更高的抽象级别。

    【讨论】:

    • 另外,如果您使用其他方法来构建记事本,那么我想我的回答不会很有用:)
    猜你喜欢
    • 2014-03-29
    • 2011-10-12
    • 2013-05-22
    • 2022-06-17
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2017-11-10
    • 2022-12-18
    相关资源
    最近更新 更多