如何在CMake中添加#include <winrt/Windows.UI.ViewManagement.h>引用
解决Win32项目中引用WinRT头文件的CMake配置方法
直接修改你的CMakeLists.txt,添加WinRT依赖的SDK配置、C++标准设置以及链接必要的库,完整配置如下:
cmake_minimum_required(VERSION 3.0.0) project(BOLTgui VERSION 0.1.0) # 指定使用Windows 10 SDK,确保能找到WinRT相关头文件 set(CMAKE_SYSTEM_VERSION 10.0) # 设置C++标准为C++17及以上,WinRT API要求此版本支持 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) include(CTest) enable_testing() add_executable(BOLTgui main.cpp) # 链接WinRT API所需的核心库 target_link_libraries(BOLTgui PRIVATE windowsapp.lib)
关键配置说明:
set(CMAKE_SYSTEM_VERSION 10.0):强制CMake使用Windows 10 SDK,WinRT的头文件和库都包含在这个SDK中,避免因SDK版本过低找不到头文件。set(CMAKE_CXX_STANDARD 17):C++/WinRT依赖C++17及以上的语言特性,必须开启才能正常编译WinRT相关代码。target_link_libraries(BOLTgui PRIVATE windowsapp.lib):Windows App SDK的核心库,是调用WinRT API的必要链接依赖,缺少它会出现链接错误。
如果自动识别头文件仍有问题,可额外添加手动指定WinRT头文件目录的配置(通常无需手动设置,仅作备选):
target_include_directories(BOLTgui PRIVATE "$ENV{WindowsSdkDir}/Include/$ENV{WindowsSDKVersion}/winrt")
另外,在代码中使用WinRT API前,需要先初始化WinRT环境,示例代码如下:
#include <winrt/Windows.UI.ViewManagement.h> #include <winrt/base.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { // 初始化WinRT公寓环境 winrt::init_apartment(); // 获取系统深色/浅色模式的背景色 auto uiSettings = winrt::Windows::UI::ViewManagement::UISettings(); auto bgColor = uiSettings.GetColorValue(winrt::Windows::UI::ViewManagement::UIColorType::Background); // 后续可使用bgColor设置窗口背景 // ... }
内容的提问来源于stack exchange,提问作者CHRssg gg
相关产品推荐
相关产品推荐

