2014-02-18 6 views
0

생성 후 win32 창의 윈도우 클래스를 어떻게 바꿀 수 있습니까? 내가 호기심에서 물어 보는 이유는 Spard ++에서 Stardock의 탁월한 데스크탑 사용자 지정 도구 중 하나가 정확히 그렇게했기 때문입니다.생성 후 창 클래스를 변경 하시겠습니까?

면책 조항 (요즘 슬픈 일로 필요함) : 설명서를 검색했지만 찾을 수 없습니다. 나는 이것이 아마도 끝내려는 의도가 아니며, 많은 부작용을 초래할 수 있으며, 프로덕션 응용 프로그램에서 수행되면 안된다는 것을 알고 있습니다. 아직도, 나는 그들이 그것을 어떻게 뽑았는지 알고 싶다.

편집 : 배경 이야기가 재미있을 수도 있습니다.

저는 Stardock의 ModernMix를 가지고 놀았습니다.이 기능은 Metro/Modern/Windows Store 응용 프로그램을 바탕 화면의 창 모드로 사용할 수있게 해 주었고, 어떻게 작동하는지 알아 내고 싶었습니다. 나는 모던 애플 리케이션이 일반, 전체 화면 Win32 윈도우에서 실행된다는 것을 빨리 알았다! 실제로 창 스타일을 변경하여 최대화되지 않도록하고 제목 표시 줄 등을 제공 할 수 있습니다. 그러나 적어도 하나는 작동하지 않습니다 : 창에서 에어로 스냅을 사용할 수없고 화면 상단의 핫 가장자리를 사용할 수 없습니다 여전히 현대적인 응용 프로그램으로 창문을 취급합니다. 이 문제는 ModernMix에는 존재하지 않기 때문에 차이점을 찾고있었습니다.

HWND, 창 스타일 등 다양한 디버깅 정보를 내 앱에 지속적으로 표시하고 Spy ++로 창을 검사했습니다. 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

(심지어 만이 수행 할 수 없음을 참조한다. 만약 내가 아직 여기에 질문을 떠날거야)

. 유일한 옵션은 원래 창을 제거하고 다른 클래스를 사용하여 새 창을 만드는 것입니다.