一句话下的Squiggly线(Win32)

时间:2010-04-23 22:42:20

标签: c++ winapi gdi+

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

2 个答案:

答案 0 :(得分:3)

如果您的编辑器基于编辑控件(如记事本那样),那么我认为这将很难。通过子类化编辑控件窗口,您可以扩充其WM_PAINT处理。但问题是控件没有为您提供一种方法,可以准确找出控件中单词出现的位置。因此,你不知道在哪里绘制波浪线。

您可以使用Rich Edit控件(如写字板那样)并调整拼写错误的单词的样式。我从未使用Rich Edit,所以我无法提供详细信息。

答案 1 :(得分:0)

实际上,我不确定您在窗口中使用的方法来渲染文本,我认为您需要将其具体化。

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

同样,这也取决于你保存当前文本及其参数的方式,但想法是实现某种功能,如RenderMisspelledWord(...),它将采用你的通用文本处理类或某种渲染器类甚至(X, Y, Length) as params。此函数将从更通用的Render方法调用,该方法将从WM_PAINT处理程序调用。

它的功能还取决于你的记事本架构,但是,例如,在最后一种情况下,需要使用GDI(线)绘制下划线的 * / \ / \ / \ * 部分例程。

一般来说,每个其他情况(使用处理类)也会导致以下操作,但抽象级别更高。