Winapi 更改窗口';创造后的课堂?

Winapi 更改窗口';创造后的课堂?,winapi,internals,Winapi,Internals,创建win32窗口后如何更改窗口类?我这么问是出于好奇,因为我在Spy++中发现Stardock的一个奇特的桌面定制工具正是这样做的 免责声明(不幸的是现在是必要的):我已经搜索了文档,但找不到任何东西。我知道这可能是不打算做的,可能会导致很多wierd副作用,不应该在生产应用程序中做。不过,我还是想知道他们是怎么做到的 编辑:背景故事,可能很有趣 我在玩Stardock的ModernMix,它允许你在桌面上以窗口模式使用Metro/Modern/Windows应用商店应用程序,我想知道他们是如

创建win32窗口后如何更改窗口类?我这么问是出于好奇,因为我在Spy++中发现Stardock的一个奇特的桌面定制工具正是这样做的

免责声明(不幸的是现在是必要的):我已经搜索了文档,但找不到任何东西。我知道这可能是不打算做的,可能会导致很多wierd副作用,不应该在生产应用程序中做。不过,我还是想知道他们是怎么做到的

编辑:背景故事,可能很有趣

我在玩Stardock的ModernMix,它允许你在桌面上以窗口模式使用Metro/Modern/Windows应用商店应用程序,我想知道他们是如何做到的。我很快发现,现代应用程序只是在普通的全屏Win32 windows中运行!实际上,您可以将窗口样式更改为取消最大化,并为其设置标题栏等。。然而,至少有一件事是行不通的:你不能在窗口上使用aero snap,屏幕顶部的hot edge仍然将窗口视为一个现代应用程序。这个问题在ModernMix中不存在,所以我在寻找区别

我不断地在我的应用程序中显示各种调试信息,包括HWND、窗口样式,还使用Spy++检查了窗口。事实证明,当ModernMix取消窗口的最大化时,它的类将从Windows.UI.Core.CoreWindow“更改”为Windows.UI.Core.CoreFramedWindow。然而,在我的窗口中显示的HWND没有改变!所以我错误地得出结论,ModernMix通过改变类来摆脱窗口的特殊行为。。。但事实证明,ModernMix只是创建了另一个顶级,并以某种方式将原始窗口的内容重定向到新的顶级(至少看起来是这样)


(我仍然把这个问题留在这里,即使只是作为一个无法完成的参考。)

无法更改现有窗口的类。唯一的选择是销毁原始窗口并使用其他类创建新窗口。

当然没有官方支持的方法。您可以将窗口子类化并更改其
WndProc
,但该类本身不会更改。我严重怀疑Spy++是否在更改任何内容。你认为它到底在改变什么?具体点。@RemyLebeau:不,我以为工具(ModernMix)正在更改窗口类。我是用Spy++发现的。事实证明,ModernMix正在创建一个额外的窗口,并且可能镜像了原始窗口的内容。当我在窗口中显示HWND时,它没有改变,但是Spy++中的类改变了。