Vb6 如何在Visual Basic 6中对齐RichEdit粘贴对象位置?

Vb6 如何在Visual Basic 6中对齐RichEdit粘贴对象位置?,vb6,sendmessage,richedit,Vb6,Sendmessage,Richedit,我们有一个控件,允许用户在其中插入一个等式对象 基本上,逻辑是这样的:用户单击insert math equation,我们允许他们使用外部MathML编辑器,然后我们将粘贴一个图像来表示RichEdit控件中的方程式: ' Paste the picture into the RichTextBox. SendMessage ctlLastFocus.hwnd, WM_PASTE, 0, 0 找到其位置并使用以下工具将其锁定: With ctlLastFocus 'lock the

我们有一个控件,允许用户在其中插入一个等式对象

基本上,逻辑是这样的:用户单击insert math equation,我们允许他们使用外部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世界里,这一切都很好,但我们也允许使用字符,我注意到,当你使用汉字时,插入的位置错了一半,也就是说,如果它应该是第七个位置,那么它就插入到第三个位置

基本上除以2,我想是因为Unicode需要两个字节,而ANSI只需要一个字节。所以,因为我是一个并没有使用RichEdit和Visual Basic 6的经验的哑巴

所以我的问题是:当我使用sendMessage行粘贴图像时,是否可以更改图像的位置


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

我的方法是这样的,如果您查看rtf.SelRTFproperty,您将能够准确地看到在RichTextBox中创建视觉效果的rtf代码是什么。然后,您可以将其保存到一个文件中,将其加载到word中,并将图像移动到正确的位置,保存文件并再次查看RTF代码。在这一点上,您应该对中文或其他Unicode语言的组合有足够的了解,以构建字符串操作代码来完成您想要的操作。我不完全确定每个unicode字符是否都是2个字节——如果你真的想支持整个范围,那么值得一看


希望对您有所帮助。

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

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

如何确定插入位置?我只能看到锁码。