Визуальные стили не работают на внутрипроцессном COM-сервере - PullRequest
6 голосов
/ 28 ноября 2011

Я занимаюсь разработкой программы, которая использует визуальные стили.Метод Main выглядит следующим образом:

[STAThread]
static void Main() {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form());
}

Программа также работает как плагин другого приложения и запускается, в данном случае, через COM.Проблема в том, что вызывающее приложение (COM-клиент) не вызывает EnableVisualStyles и находится вне моего контроля.В этом случае программа запускается следующим образом:

public static void StartAsPlugin() {
   Application.EnableVisualStyles();
   Form form = new Form();
   form.ShowDialog();
}

Когда программа запускается как плагин, индикаторы выполнения и поля со списком не отображаются в том же стиле, что и при нормальном запуске программы,в то время как кнопки, флажки и переключатели в порядке.Есть ли способ форсировать визуальный стиль?Я попробовал с манифестом, но безуспешно!Вот манифест, который я попробовал:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="*"
    name="RealApp"
    type="win32"
/>
<description>Your application description here.</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

Я думаю, что манифест встроен правильно, потому что ildasm показывает следующее в разделе манифеста:

.mresource public RealApp.RealApp.exe.manifest
{
  // Offset: 0x000004F0 Length: 0x0000029B
}

Спасибо, Стенио

1 Ответ

2 голосов
/ 29 декабря 2011

По словам Рэймонда Чена, плагин является гостем в процессе хоста и не должен менять ковры.

http://blogs.msdn.com/b/oldnewthing/archive/2010/04/30/10004931.aspx

Нет никакого способа включить их, потому что это не то, что вы должны делать.

Если хост-процесс не хочет использовать визуальные стили, вы, вероятно, не должны их использовать. Попробуйте разместить плагин без визуальных стилей при размещении в приложении без визуальных стилей.

В противном случае см. Совет Кена выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...