Windows窗体 这个API因为在不同的系统中,是不一样的,所以上层软件基本都对这里进行了封装。 一方面是为了统一api,另一方面是更易用。
窗口的api 被封装之后,有些操作还是通过原生api 实现的。 这些被代码藏在了user32.dll 中。
因为C# 的封装很成熟,所以对于其它语言中,看起来很麻烦的操作,对于C# 而言实现起来非常简单。
又因为 逻辑树和UI树,基本上在Html 上已经被验证了,非常成功,所以理解和使用都非常方便。
但是这个逻辑在原生C++ 中,或者是在其他的语言中,其实是有些麻烦的。
常见的窗口的逻辑,如自绘窗口,虽然说是自绘iu,但实际上实现逻辑是隐藏了标题栏,然后自己重新实现了一个标题栏。
还有就是透明窗体,以及高斯模糊(很好看,但是除了微软自己的软件,如菜单使用了之外,用处不大),这个逻辑在win11 中被修改了。
UI线程独占是一个很有趣的事情,因为直接用C++ 实现,其实并没有这些事情,但是多线程在更新的时候,容易锁出现问题。
当然也可以一个线程一个UI 。 比如在OpenGL 实现的效果就是这样的。