2011-12-26 5 views
1

코드 here을 사용하여 F #을 사용하여 작성중인 코드에서 서식있는 텍스트 상자의 화면 새로 고침을 일시 중지하고 싶습니다. 그 문제에 대해 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

Msg 매개 변수 유형이 수정되었습니다. IntPtr이나 nativeint를 사용하는 것이 좋다고 생각합니다. 다른 하나보다 관용적 인 것으로 보이지 않습니다. – Robert

관련 문제