wpf - .NET GUI 中仍在使用 native Windows 控件吗?

标签 wpf windows winforms winapi common-controls

当您使用 WinForms 或 WPF 创建 GUI 时显示的内容是否仍然基于像 Common Controls 这样的 native 控件?或任何 system provided Window Classes还是显示的所有内容都是由框架绘制的“自定义”内容?

注意:我说的不是文件对话框之类的东西,而是实际使用 WinForms 或 WPF 实现的 GUI。

是的,这纯粹是出于兴趣。

最佳答案

用户 HighCore 评论:

WPF Uses an "HWND" for the Window objects, but then all other objects (Controls) inside the Window are WPF objects not related to Win32 in any way, wheareas AFAIK, winforms uses a separate HWND for each UI element.

事实上,使用 Spy++,当我们创建一个带有简单对话框/窗口和一个按钮的测试应用程序时,我们可以观察到以下内容:

MFC/ native :

  • 应用程序窗口是一个窗口类 (HWND),其窗口类为 #32770 (Dialog)(我使用了“基于对话框”的应用程序。)
    • 按钮是一个单独的窗口(类:Button)

Windows 窗体:

  • 应用程序窗口具有窗口类 WindowsForms10.Window.8.app.0.2bf8098_r20_ad1(我的天)
    • 按钮是一个单独的窗口(类:WindowsForms10.BUTTON.app.0.2bf8098_r20_ad1)

WPF

  • 只有一个 顶级窗口,尽管我在 UI 设计器中向该窗口添加了一个 ComboBox、一个 ListBox 和一个 Menu。
  • 唯一窗口的类是:HwndWrapper[WpfApplication1.exe;;9b1aec0f-1b88-419c-8730-858906314cd9]

Window 类名实际上非常有趣:使用 MFC/native 类名,您可以获取已知多年并记录在 MSDN 上的类。对于 Windows 窗体,它似乎总是使用相同的类名。对于 WPF,窗口类的名称似乎也包含可执行文件/进程名称。

所以显然 MS 认为不再需要每个窗口使用多个窗口。我想我需要为此打开第二个问题。

关于wpf - .NET GUI 中仍在使用 native Windows 控件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16251670/

相关文章:

c# - 在随机生成的迷宫上使用递归回溯

C# 搜索文本文件,返回所有包含一个词的行

wpf - TabItem 上的 IsMouseOver 触发器

wpf - 可以将 XmlDataProvider 与 d :DataContext? 一起使用

java - 是否可以在 C :/Windows/System32/location at runtime? 中放置一个 myfile.file

Python 将子进程重定向到文件和控制台

windows - 编译运行跨平台测试环境

c# - Caliburn 微 : Disable button on form validation error

C#:同一应用程序中的 WPF 和命令行

C# 基础设施 UltraDockManager