4

当您使用 WinForms 或 WPF 创建 GUI 时显示的内容是否仍然基于本机控件(如Common Controls)或任何系统提供的窗口类,或者显示的所有内容都是由框架绘制的“自定义”?

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

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

4

2 回答 2

2

用户 HighCore 评论说:

WPF 对 Window 对象使用“HWND”,但是 Window 内的所有其他对象(控件)都是 WPF 对象,与 Win32 没有任何关系,因为 AFAIK,winforms 为每个 UI 元素使用单独的 HWND。

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

MFC/本机:

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

Windows 窗体:

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

WPF

  • 只有一个顶级窗口,但为了更好地衡量,我在 UI 设计器中向该窗口添加了一个组合框、一个列表框和一个菜单。
  • 唯一窗口的类是:HwndWrapper[WpfApplication1.exe;;9b1aec0f-1b88-419c-8730-858906314cd9]

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

因此,显然 MS 认为不再需要每个窗口使用多个窗口。我想我需要为此提出第二个问题。

于 2013-04-27T18:04:55.717 回答
0

Windows 窗体对某些 UI 元素使用本机控件。WPF 自己绘制所有内容。

于 2013-09-01T13:55:23.620 回答