快速开始
本页使用 CMake 和 Win32 创建一个最小 LitheView 宿主。完整实现可参考 SDK 中的 examples/litheview_demo。
环境要求
- Windows x64
- Visual Studio 2022 或兼容的 MSVC 工具链
- CMake 3.21 或更高版本
- 支持 C++20 的编译器
LitheView 本身不依赖 Qt,也不要求客户机安装浏览器。
1. 配置 CMake
将 LitheView_DIR 指向 SDK 的 lib/cmake/LitheView 目录:
cmake_minimum_required(VERSION 3.21)
project(my_litheview_app LANGUAGES CXX)
find_package(LitheView CONFIG REQUIRED)
add_executable(my_litheview_app WIN32 main.cc)
target_compile_features(my_litheview_app PRIVATE cxx_std_20)
target_link_libraries(my_litheview_app PRIVATE LitheView::LitheView)
add_custom_command(TARGET my_litheview_app POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:LitheView::LitheView>
$<TARGET_FILE_DIR:my_litheview_app>)
配置与构建:
cmake -S . -B build -DLitheView_DIR=C:\sdk\litheview\lib\cmake\LitheView
cmake --build build --config Release
最终运行目录只需要应用程序和 litheview.dll。
2. 初始化 Runtime
ltv_run() 会阻塞当前线程。等运行时准备完成后,ready callback 才可以创建 View。
#include <windows.h>
#include <litheview/litheview.h>
#include <litheview/litheview_win.h>
struct AppState {
HWND render_window = nullptr;
ltv_view_t view = nullptr;
};
void LTV_CALLBACK OnReady(void* user_data) {
auto* app = static_cast<AppState*>(user_data);
app->view = ltv_view_create();
if (!app->view ||
ltv_win_view_attach(
app->view, reinterpret_cast<uintptr_t>(app->render_window)) != LTV_OK) {
ltv_shutdown();
return;
}
ltv_view_navigate(app->view, "https://example.com/");
}
int RunLitheView(int argc, const char* const* argv, HWND render_window) {
ltv_settings_t settings = {
.struct_size = sizeof(ltv_settings_t),
.version = LTV_STRUCT_VERSION,
.width_dip = 1280,
.height_dip = 720,
.device_scale_factor =
static_cast<float>(GetDpiForWindow(render_window)) / 96.0f,
.remote_debugging_enabled = 0,
};
if (ltv_initialize(&settings) != LTV_OK) {
return 1;
}
AppState app{.render_window = render_window};
return ltv_run(argc, argv, &OnReady, &app);
}
3. 同步窗口尺寸
原生窗口大小变化时,同时传入逻辑 DIP 和物理像素大小:
ltv_win_view_resize(view,
width_dip,
height_dip,
width_pixels,
height_pixels);
在 per-monitor DPI 场景中,不要用物理像素替代 DIP。详细规则见 Windows Surface。
4. 正确关闭
if (view) {
ltv_win_view_detach(view);
ltv_view_destroy(view);
view = nullptr;
}
ltv_shutdown();
如果启用了 GPU output,必须先停止输出并归还所有 frame lease。ltv_shutdown() 完成后,ltv_run() 才会返回。
下一步
- 为 View 注册事件回调
- 接入页面与宿主通信
- 处理导航、焦点和页面状态