Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 本机Windows控件是否仍在.NET GUI中使用?_Wpf_Windows_Winforms_Winapi_Common Controls - Fatal编程技术网

Wpf 本机Windows控件是否仍在.NET GUI中使用?

Wpf 本机Windows控件是否仍在.NET GUI中使用?,wpf,windows,winforms,winapi,common-controls,Wpf,Windows,Winforms,Winapi,Common Controls,当您使用WinForms或WPF创建GUI时显示的内容是否仍然基于本机控件(如或其中任何控件),或者显示的所有内容是否都是由框架绘制的“自定义” 注意:我不是在说文件对话框之类的东西,而是用WinForms或WPF实现的GUI 是的,这纯粹是出于兴趣。用户HighCore评论道: WPF对窗口对象使用“HWND”,但对所有其他对象使用“HWND” 窗口中的(控件)是与中的Win32无关的WPF对象 无论如何,winforms对每个UI都使用单独的HWND 元素 事实上,使用Spy++,当我们创建

当您使用WinForms或WPF创建GUI时显示的内容是否仍然基于本机控件(如或其中任何控件),或者显示的所有内容是否都是由框架绘制的“自定义”

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


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

用户HighCore评论道:

WPF对窗口对象使用“HWND”,但对所有其他对象使用“HWND” 窗口中的(控件)是与中的Win32无关的WPF对象 无论如何,winforms对每个UI都使用单独的HWND 元素

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

MFC/本机:
  • 应用程序窗口是一个窗口(HWND),窗口类为
    #32770(Dialog)
    (我使用了一个“基于对话框”的应用程序)
    • 该按钮是一个单独的窗口(类:
      按钮
Windows窗体:
  • 应用程序窗口具有窗口类
    WindowsForms10.window.8.app.0.2bf8098_r20_ad1
    (噢,我的天)
    • 按钮是一个单独的窗口(类别:
      WindowsForms10.Button.app.0.2bf8098\u r20\u ad1
WPF
  • 只有一个顶级窗口,不过为了更好地衡量,我在UI设计器中为该窗口添加了一个组合框、一个列表框和一个菜单
  • 唯一窗口的类是:
    HwndWrapper[WpfApplication1.exe;;9b1aec0f-1b88-419c-8730-858906314cd9]
窗口类名称实际上非常有趣:使用MFC/本机名称,您可以获得多年的已知类,并在MSDN上记录。对于Windows窗体,它似乎总是使用相同的类名。对于WPF,窗口类的名称似乎也包含了可执行文件/进程名


显然,MS认为每个窗口使用多个窗口已经不再必要了。我想我需要回答第二个问题。

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

WPF对
窗口使用“HWND”作为对象,但窗口内的所有其他对象(控件)都是WPF对象,与Win32没有任何关系,但winforms对每个UI元素都使用单独的HWND。Spy++不是一个进行反向工程的好工具,您无法轻松看到各种弹出窗口。与工具提示、上下文菜单、组合框下拉列表类似。很容易错过传统的功能,比如shell对话框和webbrowser。