Я программирую графический интерфейс с winapi, но мое приложение выглядит как тема Windows 98.
Как использовать текущую тему окна?
Я пытался создать файл манифеста, но он не работает.
test.cpp
# include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow
){
MessageBox(NULL, "Hello World!", "Hello", MB_OK);
return 0;
}
Test.exe.Manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
name="App.Win.Test"
processorArchitecture="x86"
version="1.0.0.0"
type="win32"/>
<description>Test</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Manifest.rc
1 24 "Test.exe.Manifest"
Я скомпилировал с помощью компилятора MinGW в Windows XP SP3.
g++ Test.cpp -c
windres Manifest.rc -O coff -o Manifest.res
g++ Test.o Manifest.res -o Test.exe -Wl,-subsystem,windows
Но когда я запускаю исполняемый файл, он закрывается. Без файлов манифеста и ресурсов он работает, но использует тему Windows 98.
Спасибо
Edit:
Спасибо, теперь все работает.
Я скопировал файл манифеста из учебника и не вызывал InitCommonControls ().
InitCommonControls () работает.
Мне пришлось отредактировать свой commctrl.h, потому что там было отключено InitCommonControlsEx (), и теперь оно работает.
Команда компоновщика изменена:
g++ Test.o Manifest.res -o Test.exe -Wl,-subsystem,windows -lcomctl32