在 F# 中如何在没有 window 的情况下绘制到屏幕上的像素?

How to draw to a pixel on the screen without a window in F#?

我在 Question/Answer 找到了 Python 的答案。我想知道如何在 F# 中执行此操作以及我具体需要导入什么以及如何获取设备上下文。我意识到使用 window 更好,但我不想为我正在进行的项目使用太多。我猜也有办法获得屏幕的 width/height。

这是一个最小的示例,它使用 GetDCSetPixel 函数来完成与所引用问题中的 Python 示例完全相同的事情:

open System
open System.Runtime.InteropServices

[<DllImport("user32.dll",EntryPoint="GetDC")>]
extern IntPtr GetDC(IntPtr ptr)

[<DllImport("gdi32.dll")>]
extern uint32 SetPixel(IntPtr hdc, int X, int Y, uint32 crColor);

let dc = GetDC(IntPtr.Zero)

for i in 0 .. 255 do
  let r, g, b = 255, i, 255
  let clr = (r <<< 16) ||| (g <<< 8) ||| b
  SetPixel(dc, i, 0, uint32 clr) |> ignore

也就是说,我无法想象这是一件好事的场景。如果您正在创建一个合理的 windows 应用程序,您肯定会想要在属于您的应用程序的 window 中绘制任何内容。