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

StackOverflow https://stackoverflow.com/questions/34712

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

<Ч>

Редактировать пост-ответ:

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

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

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

 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

Тело кода:


Dim stringThemeName As New System.Text.StringBuilder(260)
Dim stringColorName As New System.Text.StringBuilder(260)
Dim stringSizeName As New System.Text.StringBuilder(260)

GetCurrentThemeName(stringThemeName, 260, stringColorName, 260, stringSizeName, 260) MsgBox(stringThemeName.ToString)

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

if (Application.RenderWithVisualStyles)
{
    // you're themed
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top