2011-12-26 6 views
1

私はF#を使用して書いていたコードでリッチテキストボックスの画面のリフレッシュを中断するコードhereを使用したいと思います。私はSendMessage(またはその問題に関してはWM_SETREDRAWまたはEM_GETEVENTMASK)の使い方を知らない。 F#の関連する関数を宣言して使用するにはどうすればよいですか?F#からSendMessageを使用するには?

コード:

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); 
} 

答えて

2

Msdn documents how to declare external functions in F#.

あなたの機能のようなものになります。私は残りの部分を把握するために

open System 
open System.Runtime.InteropServices 

module InteropWithNative = 
    [<DllImport(@"User32")>] 
    extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam) 
+1

は、ヒントの十分でした。ありがとう! –

+0

は 'Msg'はない' IntPtr'、 'int'または' uint32'する必要があります - あなたはそれを持っているように、x64プラットフォーム上のスタックの不均衡が存在します。 (また、それはF#で 'IntPtr'より' nativeint'を使用することがより慣用的だが、それはここには技術的な関係もありません。) – ildjarn

+0

は、メッセージのパラメータの型を修正しました。 IntPtrとnativeintのどちらを使うのもいいと思いますが、私は他のものよりも慣れているとは思わないのです。 – Robert

関連する問題