2014-02-18 45 views
0

如何在創建後更改win32窗口的窗口類別?我出於好奇而問,因爲我發現使用Spy ++這些來自Stardock的奇特桌面定製工具就是如此。創建後更改窗口的類?

免責聲明(現在很遺憾):我查了文檔,找不到任何東西。我知道這可能不是要完成的,可能會導致很多奇怪的副作用,而且不應該在生產應用程序中完成。不過,我想知道他們是如何將其取消的。

編輯:背景故事,可能很有趣。

我在玩Stardock的ModernMix,它允許您在桌面上以窗口模式使用Metro/Modern/Windows Store應用程序,並且我想弄清楚它們是如何實現的。我很快發現現代應用程序只能在普通的全屏Win32窗口中運行!實際上,您可以更改窗口樣式以取消最大化窗口樣式併爲其指定標題欄等。但是,至少有一件事情不起作用:您無法在窗口上使用aero捕捉,並且屏幕頂部的熱邊緣仍然把這個窗口當作一個Modern應用程序。 ModernMix中不存在這個問題,所以我一直在尋找差異。

我不斷在我的應用程序中顯示各種調試信息,包括HWND,窗口樣式,還用Spy ++檢查了Window。事實證明,當ModernMix取消最大化窗口時,它是從Windows.UI.Core.CoreWindow到Windows.UI.Core.CoreFramedWindow的類「更改」。然而,顯示在我窗口中的HWND並沒有改變!所以我錯誤地得出結論ModernMix通過改變類來擺脫窗口的特殊行爲......但事實證明,ModernMix只是創建了另一個頂層,並以某種方式將原始窗口的內容重定向到了新的頂層(至少這就是它的外觀喜歡)。

(我還是離開的問題在這裏,即使只作爲參考,它不能這樣做。)

+0

這樣做肯定沒有官方支持的方式。你可以創建一個窗口的子類並改變它的'WndProc',但是類本身不會改變。 –

+0

我嚴重懷疑Spy ++正在改變任何事情。你認爲它究竟發生了什麼變化?請明確點。 –

+0

@RemyLebeau:不,我認爲*工具*(ModernMix)正在改變窗口類。我用Spy ++發現了它。事實證明,ModernMix正在創建一個*額外*窗口,並可能反映了原始窗口的內容。當我在窗口內部顯示HWND時,它沒有改變,但Spy ++中的類改變了。 – jdm

回答

2

沒有辦法更改類現有的窗口。唯一的選擇是銷燬原始窗口並使用不同的類創建一個新窗口。