使用 VB.net 并按照这篇post,我尝试向文本框添加一个按钮。除了这行代码之外,一切都很顺利:
SendMessage(textBoxFolder.Handle, 0xd3, (IntPtr)2, (IntPtr)(btn.Width << 16));
如何将其转换为 VB.NET?
我在这篇post和这篇article中找到了帮助,然后来到了这里:
Dim btnExtend As Button = New Button()
Dim ptr1 As IntPtr
Dim ptr2 As IntPtr
Dim n As Integer = 2
ptr1 = Marshal.AllocHGlobal(4)
ptr2 = Marshal.AllocHGlobal(4)
Const EM_SETMARGINS As Integer = &HD3
Dim p As Integer = btnExtend.Width
Marshal.WriteInt32(ptr1, n)
Marshal.WriteInt32(ptr2, p)
SendMessage(Me.Handle, EM_SETMARGINS, ptr1, ptr2 << 16)
Marshal.FreeHGlobal(ptr1)
Marshal.FreeHGlobal(ptr2)
我在
ptr2 << 16
部分收到 bc30452 错误(未为类型 '' 和 '' 定义运算符 '')。我该如何纠正?
<<
和 >>
是位移运算符。这些运算符是在 VB.NET 中定义的,但看起来不适用于 IntPtr
类型。我没有检查过,但我猜想 C# 中也会出现这种情况。这意味着,如果您有一个 IntPtr
开始,您需要将其转换为适当的整数类型 - 可能是 Integer
或 Long
- 并对其进行位移,然后转换回来,例如
Dim p1 As IntPtr
'...
Dim p2 = CType(CInt(p1) << 16, IntPtr)