У меня есть addin для Office 2007, который добавляет панель инструментов с некоторыми кнопками и обработчиками для своих событий OnClick. Когда пользователь нажимает на кнопки, некоторые диалоги показывают. Но эти диалоги имеют устаревший вид Windows 98 с прямоугольными кнопками даже в Windows 7.Office COM add-in, диалоги не имеют темы luna/aero (они выглядят как классический вид Windows 98)
Я знаю, что для включения тематики вам нужен файл манифеста, но это добавление создается с помощью Visual Studio 2008 и добавляет манифест автоматически, которая выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
Что нужно изменить, чтобы сделать мой диалог использовать текущую тему вместо Windows 98 выглядеть? Я читал об осознании изоляции, но это тоже не работало.
я добавил InitCommonControlsEx в конструкторе моего класса надстройку, но, похоже, не будет никакого эффекта. Я делаю что-то неправильно? Cconnect :: Cconnect() { \t INITCOMMONCONTROLSEX initcommctrl = {SizeOf (initcommctrl), 0xffffffff}; \t InitCommonControlsEx (& initcommctrl); \t MessageBox (0,0,0,0); } Показанный здесь MessageBox не является тематическим. – sashoalm
Я также добавил #define ISOLATION_AWARE_ENABLED 1 Наверху моего stdafx, но все еще не повезло. – sashoalm
Я только что понял, что InitCommonControlsEx не возвращает FALSE, но быстро публикует сообщение на форуме, объясняя, что проблема возникает из манифеста, и что я должен добавить эту прагму в свой код: #pragma comment (linker, "/ manifestdependency : \ "type = 'win32' name = 'Microsoft.Windows.Common-Controls'" "version = '6.0.0.0' processorArchitecture = '*' publicKeyToken = '6595b64144ccf1df' language = '*' \" ") Это сделал трюк :) На самом деле оказывается, что INITCOMMONCONTROLSEX не нужен в конце концов, возможно, что-то с файлом манифеста было неправильным в моем проекте. Но спасибо вам все равно :) – sashoalm