Изменить класс окна после создания?

Как я могу изменить класс окна окна win32 после создания? Я спрашиваю из любопытства, потому что с помощью Spy++ я обнаружил, что один из этих причудливых инструментов для настройки рабочего стола от Stardock делает именно это.

Отказ от ответственности (к сожалению, необходимый в наши дни): я искал документацию и ничего не нашел. Я знаю, что это, вероятно, не предназначено для выполнения, может вызвать множество странных побочных эффектов и не должно выполняться в рабочем приложении. Тем не менее, я хотел бы знать, как они это провернули.

Редактировать: предыстория может быть интересной.

Я играл с ModernMix от Stardock, который позволяет вам использовать приложения Metro/Modern/Windows Store на рабочем столе в оконном режиме, и я хотел выяснить, как они это делают. Я быстро обнаружил, что современные приложения просто работают в обычных полноэкранных окнах Win32! На самом деле вы можете изменить стили окна, чтобы развернуть его и дать ему заголовок и т. Д. Однако по крайней мере одна вещь не работает: вы не можете использовать аэродинамическую привязку к окну и горячий край в верхней части экрана. по-прежнему рассматривает окно как современное приложение. В ModernMix этой проблемы нет, поэтому я искал разницу.

Я постоянно отображал в своем приложении различную отладочную информацию, включая HWND, стили окон, а также исследовал окно с помощью Spy++. Оказывается, когда ModernMix разворачивает окно, его класс «меняется» с Windows.UI.Core.CoreWindow на Windows.UI.Core.CoreFramedWindow. Однако HWND, отображаемый в моем окне, не изменился! Итак, я ошибочно заключил, что ModernMix избавляется от особого поведения окна, изменяя класс... Но оказывается, ModernMix просто создает еще один верхний уровень и каким-то образом перенаправляет содержимое исходного окна на новый верхний уровень (по крайней мере, так оно выглядит). нравится).

(Я все еще оставляю вопрос здесь, хотя бы как ссылку на то, что это невозможно.)


person jdm    schedule 18.02.2014    source источник
comment
Конечно, нет официально поддерживаемого способа сделать это. Вы можете создать подкласс окна и изменить его WndProc, но сам класс не изменится.   -  person Jonathan Potter    schedule 19.02.2014
comment
Я серьезно сомневаюсь, что Spy++ что-то меняет. Как вы думаете, что именно меняется? Быть конкретными.   -  person Remy Lebeau    schedule 19.02.2014
comment
@RemyLebeau: Нет, я думал, что tool (ModernMix) меняет класс окна. Я нашел это с помощью Spy++. Оказывается, ModernMix создавал дополнительное окно и, вероятно, отражал содержимое исходного окна. Когда я отобразил HWND внутри окна, он не изменился, но изменился класс в Spy++.   -  person jdm    schedule 19.02.2014


Ответы (1)


Невозможно изменить класс существующего окна. Единственный вариант — уничтожить исходное окно и создать новое окно, используя другой класс.

person Remy Lebeau    schedule 19.02.2014