Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使用来自F#的SendMessage?_.net_F#_Sendmessage - Fatal编程技术网

.net 如何使用来自F#的SendMessage?

.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:

我想使用该代码在我正在使用F#编写的代码中暂停富文本框的屏幕刷新。我不知道如何使用SendMessage(或WM_SETREDRAW或EM_GETEVENTMASK)。如何声明和使用F#中的相关函数

守则:

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用于编辑。:-]