.net 如何使用来自F#的SendMessage?
我想使用该代码在我正在使用F#编写的代码中暂停富文本框的屏幕刷新。我不知道如何使用SendMessage(或WM_SETREDRAW或EM_GETEVENTMASK)。如何声明和使用F#中的相关函数 守则:.net 如何使用来自F#的SendMessage?,.net,f#,sendmessage,.net,F#,Sendmessage,我想使用该代码在我正在使用F#编写的代码中暂停富文本框的屏幕刷新。我不知道如何使用SendMessage(或WM_SETREDRAW或EM_GETEVENTMASK)。如何声明和使用F#中的相关函数 守则: private void StopRepaint() { // Stop redrawing: SendMessage(this.Handle, WM_SETREDRAW, 0, IntPtr.Zero); // Stop sending of events:
private void StopRepaint()
{
// Stop redrawing:
SendMessage(this.Handle, WM_SETREDRAW, 0, IntPtr.Zero);
// Stop sending of events:
eventMask = SendMessage(this.Handle, EM_GETEVENTMASK, 0, IntPtr.Zero);
}
您的函数将类似于:
open System
open System.Runtime.InteropServices
module InteropWithNative =
[<DllImport(@"User32")>]
extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam)
开放系统
open System.Runtime.InteropServices
模块互操作=
[]
外部IntPtr发送消息(IntPtr hWnd、int Msg、IntPtr wParam、IntPtr lParam)
对我来说是一个足够的提示,足以让我明白剩下的部分。谢谢Msg
应该是int
或uint32
,而不是IntPtr
——正如您所看到的,x64平台上会出现堆栈不平衡。(另外,在F#中使用nativent
比使用IntPtr
更为惯用,但这与技术无关)修复了Msg参数类型。我认为可以使用IntPtr或nativeint,我不认为其中一个比另一个更惯用。@Robert:嗯,一个是类型别名,总是在作用域内(除非阴影),而另一个则需要打开
;人们会同意,在C#中使用int
和string
比使用Int32
和string
更为惯用,不是吗?在任何情况下,正如我所说的,这都没有技术意义,因此+1用于编辑。:-]