Добрый день!
Помогите пожалуйста с установкой визуальных стилей Windows XP в программе, написаной на WinAPI в 2005-й студии. Я облазил весь форум и перепробовал все что смог найти в интернете. Стал подозревать что проблема во мне :)
Вообщем хочу я чтобы кнопочки, таблички и т.д. вылезали красиво обмалеванными в стиле XP. Перечитав всё, что я смог найти, я понял, что надо рядом с исполняемым файлом проекта (например DuperAPP.exe) создать файл манифеста с именем DuperAPP.exe.manifest со следующим содержанием:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity processorArchitecture="*" version="5.1.0.0" type="win32"
name="Microsoft.Windows.Shell.shell32" />
<description>Windows Shell</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls"
version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*"
processorArchitecture="*" />
</dependentAssembly>
</dependency>
</assembly>
После добавления мною этого манифеста при попытке запуска приложения я получаю сообщение "Приложению не удалось запуститься, поскольку MSVCR80D.dll не был найден. Повторная установка приложения может исправить эту проблему." И всё :(
На форуме нашел похожую ошибку, там было написано — в настройках проекта в пути Mainfest Tool -> Input and Output -> Embed Manifest поставить "no". Я так и сделал — после этого сообщение об ошибке исчезло, но все окошки опять в старом убогом стиле и к тому же файл манифеста урезался почти в два раза и в нём стало так:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
Пожалуйста, помогите мне, я уже измучался! Я два дня потратил на поиски и не сдвинулся ни на ёту!
Объясните, пожалуйста, что надо тыкать или что писать?
Я создаю стандартный пустой проект Win32 Project, пишу с использованием WTL или на чистом API.
Скажите, как заставить этот код отображать красивую Windows XP кнопку?:
#include "Windows.h"
#include "tchar.h"
LRESULT CALLBACK ButtonProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
// Регистрируем класс окна.
WNDCLASSEX wc;
wc.cbSize = sizeof(wc);
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)COLOR_WINDOWFRAME;
wc.hCursor = LoadCursor(hInstance, IDC_ARROW);
wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
wc.hIconSm = LoadIcon(hInstance, IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpfnWndProc = ButtonProc;
wc.lpszClassName = _T("TestButton");
wc.lpszMenuName = 0;
wc.style = CS_HREDRAW | CS_VREDRAW;
if(!RegisterClassEx(&wc)) MessageBox(NULL, _T("happened."), _T("Shit with class"), MB_OK);
// Создаем главное окно.
HWND hButWnd = CreateWindowEx(0, _T("TestButton"), _T("XPButton"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, 0, hInstance, 0);
if(!hButWnd) MessageBox(NULL, _T("happened."), _T("Shit with window"), MB_OK);
ShowWindow(hButWnd, SW_SHOW);
// Создаем дочернюю кнопку в главном окне.
HWND hButton = CreateWindowEx(0, _T("Button"), _T("Please, be XP!"), WS_CHILD, 0, 0, 200, 50, hButWnd, 0, hInstance, 0);
if(!hButton) MessageBox(NULL, _T("happened."), _T("Shit with button"), MB_OK);
ShowWindow(hButton, SW_SHOW);
// Запускаем обработку сообщений.
MSG msg;
while(GetMessage(&msg, hButWnd, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK ButtonProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
Здравствуйте, Pe3oHaHc, Вы писали:
PHH>После добавления мною этого манифеста при попытке запуска приложения я получаю сообщение "Приложению не удалось запуститься, поскольку MSVCR80D.dll не был найден. Повторная установка приложения может исправить эту проблему." И всё
ну так найдите требуемую длл-ну и положите рядом с вашим "исполняемым файлом проекта"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я так понимаю что проблема в самой среде — везде описывается как настроить визуальные стили в 6й студии, однако в .net это не работает(
Здравствуйте, Pe3oHaHc, Вы писали:
PHH>Добрый день!
PHH>Помогите пожалуйста с установкой визуальных стилей Windows XP в программе, написаной на WinAPI в 2005-й студии. Я облазил весь форум и перепробовал все что смог найти в интернете. Стал подозревать что проблема во мне
PHH>Вообщем хочу я чтобы кнопочки, таблички и т.д. вылезали красиво обмалеванными в стиле XP. Перечитав всё, что я смог найти, я понял, что надо рядом с исполняемым файлом проекта (например DuperAPP.exe) создать файл манифеста с именем DuperAPP.exe.manifest со следующим содержанием:
PHH>PHH><?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
PHH> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
PHH> <assemblyIdentity processorArchitecture="*" version="5.1.0.0" type="win32"
PHH> name="Microsoft.Windows.Shell.shell32" />
PHH> <description>Windows Shell</description>
PHH> <dependency>
PHH> <dependentAssembly>
PHH> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls"
PHH> version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*"
PHH> processorArchitecture="*" />
PHH> </dependentAssembly>
PHH> </dependency>
PHH> </assembly>
PHH>
А вы manifest прилинковали?
PHH>После добавления мною этого манифеста при попытке запуска приложения я получаю сообщение "Приложению не удалось запуститься, поскольку MSVCR80D.dll не был найден. Повторная установка приложения может исправить эту проблему." И всё
На конце имени библиотеки стоит "D" — это DEBUG версия. Попробуй пересобери проект в RELEASE версию.
Во-первых, он будет меньше весить. Во-вторых, вполне возможно ошибка уйдет.
А еще можно дополнительно в настройках покопаться — гдето можно сделать статическую линковку, чтобы всякие левые DLL были не нужны.