当您使用 WinForms 或 WPF 创建 GUI 时显示的内容是否仍然基于本机控件(如Common Controls)或任何系统提供的窗口类,或者显示的所有内容都是由框架绘制的“自定义”?
注意:我说的不是文件对话框之类的东西,而是实际使用 WinForms 或 WPF 实现的 GUI。
是的,这纯粹是出于兴趣。
当您使用 WinForms 或 WPF 创建 GUI 时显示的内容是否仍然基于本机控件(如Common Controls)或任何系统提供的窗口类,或者显示的所有内容都是由框架绘制的“自定义”?
注意:我说的不是文件对话框之类的东西,而是实际使用 WinForms 或 WPF 实现的 GUI。
是的,这纯粹是出于兴趣。
用户 HighCore 评论说:
WPF 对 Window 对象使用“HWND”,但是 Window 内的所有其他对象(控件)都是 WPF 对象,与 Win32 没有任何关系,因为 AFAIK,winforms 为每个 UI 元素使用单独的 HWND。
事实上,使用 Spy++,当我们创建一个带有简单对话框/窗口和按钮的测试应用程序时,我们可以观察到以下情况:
#32770 (Dialog)
(我使用了“基于对话框”的应用程序。)
Button
:)WindowsForms10.Window.8.app.0.2bf8098_r20_ad1
(哦,我的)
WindowsForms10.BUTTON.app.0.2bf8098_r20_ad1
:)HwndWrapper[WpfApplication1.exe;;9b1aec0f-1b88-419c-8730-858906314cd9]
Window 类的名称实际上很有趣:使用 MFC/native 类,您可以获得多年来已知并记录在 MSDN 上的类。对于 Windows 窗体,它似乎总是使用相同的类名。而对于 WPF,窗口类的名称似乎也包含了可执行文件/进程的名称。
因此,显然 MS 认为不再需要每个窗口使用多个窗口。我想我需要为此提出第二个问题。
Windows 窗体对某些 UI 元素使用本机控件。WPF 自己绘制所有内容。