0

我们有一个RichEdit控件,允许用户在其中插入Office MathML方程对象。

基本上逻辑是这样的:用户点击插入数学方程,我们允许他们使用外部的 MathML 编辑器,然后我们将一个图像来表示方程到 RichEdit 控件中:

' Paste the picture into the RichTextBox.
SendMessage ctlLastFocus.hwnd, WM_PASTE, 0, 0

找到它的位置并将其锁定使用:

With ctlLastFocus
    'lock the image
    .SelStart = .SelStart - 1
    .SelLength = 1
    .SelProtected = True

在美丽的 ANSI 世界里一切都很好,但我们也允许使用Unicode字符,而我注意到,当你使用汉字时,插入的位置错了总位置的一半,即如果它应该成为第 7 个位置,现在它被插入到第三个位置。

基本上除以二,我猜是因为 Unicode 需要两个字节,而 ANSI 只需要一个字节。所以因为我是一个没有RTF、RichEdit 和 Visual Basic 6 经验的傻瓜。

所以我的问题是:我可以在使用 sendMessage 行粘贴图像时更改图像的位置吗?

或者通过其他方式来控制插入到 RichEdit 框中的图像的位置?

4

2 回答 2

0

我的方法是这样,如果您查看该rtf.SelRTF属性,您将能够准确地看到在 RichTextBox 中创建视觉效果的 RTF 代码。然后,您可以将其保存到文件中,将其加载到 word 中并移动图像直到它在正确的位置,保存文件并再次查看 RTF 代码。此时,您应该对中文或其他 Unicode 语言的组合有足够的了解,以构建字符串操作代码来执行您想要的操作。我不完全确定每个 unicode 字符都是 2 个字节 - 如果您认真支持全系列,值得一试。

希望有帮助。

于 2009-01-30T13:34:21.733 回答
0

为什么不在粘贴之前检索位置?

Dim iStartPos As Long
Dim iLength As Long
With ctlLastFocus
    iStartPos = .SelStart
    SendMessage.hwnd, WM_PASTE, 0, 0
    iLength = .SelStart - iStartPos
    .SelStart = iStartPos
    .SelLength = iLength
    .SelProtected = True
End With
于 2009-01-30T13:59:31.150 回答