Ничего, кроме этого, особенность перспективы
ОБНОВЛЕНИЕ: эта проблема была связана с параллельными сборками: эти функции присутствуют только в comctl32.dll версии 6, но по соображениям совместимости Vista загрузит более раннюю версию, если вы не укажете иное. Большинство людей (включая меня) используют манифест. Это оказалось непростой задачей и в любом случае может быть неправильным решением, особенно если то, что вы пишете, является библиотекой: вам не обязательно заставлять все приложение использовать общие элементы управления 6.
Правильное решение - запустить новую активацию контекст при вызове одного из API только для Vista. Контекст активации будет использовать правильную версию comctl32.dll, оставив остальную часть приложения в покое, и манифест не требуется.
К счастью, это легко сделать. Некоторый полный код уже существует в базе знаний MS. Код из статьи (KB 830033) как есть.
Альтернативный управляемый API: полную оболочку для Vista TaskDialog и TaskDialogIndirect можно найти здесь:
http://code.msdn.microsoft.com/WindowsAPICodePack
Для WPF используйте следующее:
Загрузите "Библиотеку образцов VistaBridge" со страницы http://code.msdn.microsoft.com/VistaBridge после загрузки откройте проект и затем соберите его (если вы хотите просмотреть весь код, проверьте файлы в папках \ Library или \ Interop). Теперь вы можете взять DLL из VistaBridge \ bin \ debug \ и добавить ссылку на нее в свой проект, а также вы должны добавить оператор using для каждого из различных модулей VistaBridge. Например:
используя Microsoft.SDK.Samples.VistaBridge.Interop или .Library, или .Properties, или .Services - в зависимости от ваших потребностей.
Проект VistaBridge включает API-интерфейсы для многих других функций Vista (таких как диалоги TaskDialog, Vista OpenFile и SaveFile и, конечно же, эффекты Aero Glass), чтобы опробовать их, запустить проект VistaBridge.
person
almog.ori
schedule
23.10.2009