我张贴这个问题,我希望找到答案。我的问题是:我怎样才能使下面的代码功能在f#:
首先,将这些声明添加到您的Window类中:
private const int GWL_STYLE = -16;
private const int WS_SYSMENU = 0x80000;
[DllImport("user32.dll", SetLastError = true)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
然后把这段代码放到Window's Loaded事件中:
var hwnd = new WindowInteropHelper(this).Handle;
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU);
tom的翻译代码。maruska到f#的格式如下:
type HideCloseButtonOnWindow() =
inherit Behavior<Window>()
let GWL_STYLE = -16;
let WS_SYSMENU = 0x80000;
[<DllImport("user32.dll", SetLastError = true)>]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[<DllImport("user32.dll")>]
static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
override x.OnAttached() =
base.OnAttached()
x.AssociatedObject.Loaded.AddHandler(fun s e -> x.OnLoaded(s,e))
override x.OnDetaching() =
x.AssociatedObject.Loaded.RemoveHandler(fun s e -> x.OnLoaded(s,e))
base.OnDetaching()
member x.OnLoaded(sender:obj, e:RoutedEventArgs) =
let hwnd = (new WindowInteropHelper(x.AssociatedObject)).Handle
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) &&& ~~~WS_SYSMENU)
|> ignore
你应该打开:
open System.Windows.Interactivity
open System.Runtime.InteropServices
open System.Windows.Interop