.Net - Определение настроек внешнего вида (классический или XP?) - PullRequest
3 голосов
/ 29 августа 2008

У меня есть некоторый пользовательский интерфейс в VB 2005, который отлично смотрится в стиле XP, но отвратителен в классическом стиле.

Есть идеи о том, как определить, в каком режиме находится пользователь, и переформатировать формы на лету?


Опубликовать ответ Редактировать:

Спасибо, Даниэль, похоже, это сработает. Я использую первое решение, которое вы опубликовали с помощью функции GetCurrentThemeName ().

Я делаю следующее:

Объявление функции:

<code> Private Declare Unicode Function GetCurrentThemeName Lib "uxtheme" (ByVal stringThemeName As System.Text.StringBuilder, ByVal lengthThemeName As Integer, ByVal stringColorName As System.Text.StringBuilder, ByVal lengthColorName As Integer, ByVal stringSizeName As System.Text.StringBuilder, ByVal lengthSizeName As Integer) As Int32

Код тела:

<code>
Dim stringThemeName As New System.Text.StringBuilder(260)
Dim stringColorName As New System.Text.StringBuilder(260)
Dim stringSizeName As New System.Text.StringBuilder(260)</p>

<p>GetCurrentThemeName(stringThemeName, 260, stringColorName, 260, stringSizeName, 260)
MsgBox(stringThemeName.ToString)

MessageBox появляется пустым, когда я нахожусь в классическом стиле / теме Windows, и выводит "C: \ WINDOWS \ resources \ Themes \ luna \ luna.msstyles", если он в стиле / теме Windows XP Мне нужно будет немного больше проверить, чтобы увидеть, что произойдет, если пользователь установит другую тему, чем эти две, но это не должно быть большой проблемой.

Ответы [ 3 ]

2 голосов
/ 29 августа 2008

Попробуйте использовать комбинацию GetCurrentThemeName ( MSDN Page ) и DwmIsCompositionEnabled

Я связал первый с PInvoke, чтобы вы могли просто вставить его в свой код, а для второго вы можете использовать код, указанный в комментарии MSDN:

[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern bool DwmIsCompositionEnabled();

Посмотрите, какие результаты вы получите от этих двух функций; их должно быть достаточно, чтобы определить, когда вы хотите использовать другую тему!

1 голос
/ 19 сентября 2008

Лично я использую следующее, чтобы увидеть, работает ли приложение под темой:

if (Application.RenderWithVisualStyles)
{
    // you're themed
}
0 голосов
/ 29 августа 2008

Есть IsThemeActive WinAPI функция.

...