В Интернете уже давно ведутся дискуссии о реализации стиля XP посредством программирования, но идеального решения для реализации стиля XP посредством программирования на VB не существует. Автор, наконец, раскрыл секрет через N дней и ночей упорного изучения. Нижеследующее разделено на три аспекта, которыми мы хотим поделиться с вами.
Нажмите, чтобы загрузить файл исходного кода
один. Использование файлов манифеста для достижения стиля XP
В обычных условиях в системах Windows XP только заголовок окна приложения, разработанного с помощью VB6, имеет стиль XP, а кнопки, текстовые поля и другие элементы управления в форме по-прежнему отображают традиционный стиль Windows. Как показано на рисунке 1:
Из главы «Визуальный стиль» в MSDN мы знаем, что Windows XP использует Comctl32.dll (версия 6) для загрузки компонентов в стиле XP, и приложение уведомляет систему об этом через файл ресурсов XML. Содержимое XML-файла следующее:
<?xml версия=1.0 кодировка=UTF-8 автономный=да?>
<assembly xmlns=urn:schemas-microsoft-com:asm.v1 ManifestVersion=1.0>
<идентификатор сборки
name=Манифест стиля XP
Архитектура процессора = x86
версия=1.0.0.0
тип=win32/>
<зависимость>
<зависимая сборка>
<идентификатор сборки
тип=win32
name=Microsoft.Windows.Common-Controls
версия = 6.0.0.0
Архитектура процессора = x86
publicKeyToken=6595b64144ccf1df
язык=*
/>
</зависимая сборка>
</зависимость>
</сборка>
Предположим, что имя вашей окончательно скомпилированной программы — abc.exe, а рабочий каталог — d:/vbxp. Скопируйте приведенное выше XML-содержимое и сохраните его как текстовый файл. Затем переименуйте файл abc.exe.manifest (обратите внимание, что расширение .txt следует удалить). В программе VB нам нужно вызвать функцию InitCommonControlsEx, чтобы инициализировать класс компонента из comctl32.dll (версия 6) перед загрузкой всех форм. Функция API InitCommonControlsEx и связанные с ней константы и типы данных объявляются следующим образом:
Частная функция объявления InitCommonControlsEx Lib comctl32.dll _
(iccex Как tagInitCommonControlsEx) Как логическое значение
Частный тип tagInitCommonControlsEx
lngSize как долго
lngICC до тех пор, пока
Тип окончания
Частная константа ICC_USEREX_CLASSES = &H200
Здесь мы пишем функцию для инкапсуляции операции инициализации:
Открытая функция InitCommonControlsVB() как логическая
При ошибке Возобновить Далее
Dim iccex Как tagInitCommonControlsEx
С iccex
.lngSize = LenB(iccex)
.lngICC = ICC_USEREX_CLASSES
Конец с
InitCommonControlsEx iccex
InitCommonControlsVB = (Номер ошибки = 0)
При ошибке Перейти к 0
Конечная функция
Обратите внимание, что действие инициализации должно быть завершено до загрузки всех форм, поэтому соответствующие операторы должны быть помещены в Sub Main(), а проект должен быть запущен из Sub Main(). Код выглядит следующим образом:
Подглавная()
InitCommonControlsVB
Форма1.Показать
Конец субтитра
На этом этапе ваш скомпилированный abc.exe будет иметь стиль XP, как показано на рисунке 2: