Как Visual Studio 2012 рисует границу окна?

Как я могу добиться того же эффекта альфа-рамки, который можно увидеть в новом главном окне Visual Studio 2012, используя формы Windows? Кажется, что его окно светится.


person Filipe Scur    schedule 18.09.2012    source источник


Ответы (4)


Насколько я знаю, вы можете сделать это с помощью WPF, используя сочетание этот хром и пользовательскую границу WPF . Не уверен, что на WinForms вы можете, учитывая ограниченные возможности стиля (по сравнению с WPF). В любом случае они используют WPF.

person Erre Efe    schedule 18.09.2012
comment
@FilipeScur - если вы не используете WPF, будет очень сложно дублировать то, что существует в Visual Studio, есть причина, по которой даже Microsoft перешла на окна WPF. Нет причин не переходить на текущую версию .NET Framework, которая поддерживает приложения WPF. - person Security Hound; 18.09.2012
comment
Ну, как я уже сказал... сейчас это не вариант, но у меня есть планы использовать его в ближайшее время... просто я не могу сделать это прямо сейчас... спасибо. - person Filipe Scur; 18.09.2012
comment
Я нашел этот вопрос, похожий на мой, и я мог бы попробовать его и посмотреть, как он работает... stackoverflow.com/questions/8793445/ В любом случае, насколько сложно перейти на WPF? Я имею в виду... мы работали с winforms целую вечность.. - person Filipe Scur; 18.09.2012
comment
@FilipeScur поверьте мне, вы ни на секунду не пожалеете, что сделали это. WPF — лучшее изобретение со времен ПК! Это не так сложно, я рекомендую вам начать с этих пошаговых инструкций, я тоже пришел из мира Winforms, и это мне очень помогло msdn.microsoft.com/en-us/library/ee649089.aspx - person Erre Efe; 18.09.2012
comment
спасибо @ РэндольфР-Ф! Я попробую! знак равно - person Filipe Scur; 18.09.2012
comment
Вы можете сделать это в WinForms, это требует некоторой обработки сообщений в стиле C. - person weaknespase; 11.12.2015

Поэтому я не уверен, что это лучший метод, но если вы используете Spy++ (32-разрядную версию) и посмотрите в окна, вы увидите, что под главным окном Visual Studio вы можете увидеть 4 объекта «VisualStudioGlowWindow».

Я подключил сообщения в Spy++, и, как вы могли себе представить, 4 окна представляют собой 4 светящиеся рамки вокруг формы. Дальнейшая проверка показывает, что эти 4 «светящихся окна» реализуют стиль расширенного окна WS_EX_LAYERED, поэтому само свечение не выполняется в WPF (насколько я могу судить)!

Надеюсь, это прояснит некоторые вещи.

введите здесь описание изображения

person Mike    schedule 08.03.2013

Если вы не хотите рисовать всю форму самостоятельно, вы не можете. Поскольку Visual Studio 2010 и Visual Studio 2012 написаны поверх WPF и используют Windows, а не Forms.

person Security Hound    schedule 18.09.2012
comment
Предположим, я хочу сам обрабатывать все рисунки на winforms, есть ли способ?? - person Filipe Scur; 18.09.2012
comment
Создайте форму альфа-блендета для тени и переместите / измените ее размер с помощью обычного окна, которое не является альфа-блендетом и содержит границу и внутреннее содержимое. - person Ray; 12.03.2014

Visual Studio 2012 рисует границу окна с помощью собственных функций Win32. Это не связано с WPF или WindowsForms — вы можете делать это с обоими.

Свечение отображается в прозрачном окне поверх главного окна. Главное окно вызывает DWM API, чтобы установить область стекла на 0. Таким образом, вы можете рисовать поверх исходной границы и системных кнопок. Это правильный способ сделать это.

Вы можете посмотреть код оболочки WPF (http://archive.msdn.microsoft.com/WPFShell), чтобы увидеть, как выполняются вызовы DWM для удаления стекла. Тот факт, что он написан для совместимости с WPF, не имеет значения, потому что все, что вам нужно, это дескриптор (IntPtr) окна.

Если у вас есть кодовая база WindowsForms, не переходите на WPF. WPF не был улучшен в последнем выпуске платформы .NET, и нет планов по улучшению или новым функциям, поскольку его команда была интегрирована в команду Windows 8.

person Diego Frata    schedule 04.01.2013
comment
Если вы свернете главное окно Visual Studio 2012 и посмотрите на него с помощью предварительного просмотра панели задач (наведите указатель мыши на значок на панели задач, а затем наведите указатель мыши на миниатюру окна). В окне нет свечения, потому что оно визуализируется в другом окне. - person Diego Frata; 04.01.2013