Navicat 17 未声明 Per-Monitor V2 DPI 感知,manifest 中仅标记为 dpiAware=true(System-aware 模式),导致跨屏拖拽时控件错位、文字发虚、图标像素化,模型设计器因使用自绘控件且未响应 WM_DPICHANGED 消息而尤为明显。
Navicat 17 是否声明了 Per-Monitor V2 DPI 感知?
不是。navicat 17 的 manifest 中仍标记为 dpiaware=true(即 system-aware 模式),而非 permonitorv2。这意味着它只在进程启动时读取主显示器的缩放比例,跨屏拖拽到 100% 缩放副屏时,窗口内容不会动态重绘,导致控件错位、文字发虚、图标像素化——模型设计器这类重度依赖 canvas 和坐标计算的模块尤其明显。
模型设计器 UI 元素为何比主窗口更易模糊?
模型设计器使用自绘控件(如关系连线、实体框拖拽反馈、缩略图预览)而非标准 Windows Common Controls,其渲染路径绕过了系统 DPI 自动适配层。当 Windows 强制对非感知窗口做 GDI 双线性插值缩放时:
- 矢量图形被当作位图拉伸,边缘锯齿加重
- 字体光栅化未按物理像素重排,小字号中文(如字段名“用户ID”)直接糊成一团
- 鼠标悬停热区坐标未随缩放校准,常出现“点不中连线”或“拖不动实体框”
“兼容性设置”里勾选“替代高 DPI 缩放行为”有用吗?
有,但效果有限且副作用明确:
- 选
系统:强制整窗按主屏缩放渲染,副屏显示正常但主屏可能过小(尤其 150%→100% 跨屏) - 选
应用程序:交由 Navicat 自行处理,但它当前未实现WM_DPICHANGED消息响应,结果是窗口冻结缩放状态,拖回高缩放屏后 UI 崩溃(如工具栏图标堆叠、属性面板空白) - 关键限制:
navicat.exe进程一旦启动,DPI 模式即锁定,重启前无法动态切换
临时缓解但必须注意的细节
最稳妥的实操路径是「缩放对齐」而非「强行适配」:
- 将所有显示器缩放统一设为 125% 或 150%,避免跨屏场景 —— 这比折腾 manifest 或兼容性选项更可靠
- 禁用 Windows 的「让 Windows 尝试修复应用模糊问题」(设置 → 系统 → 显示 → 图形设置 → 此选项默认开启)
- 不要依赖
SetProcessDpiAwarenessContext注入补丁,Navicat 17 的 Qt 框架与该 API 存在已知冲突,会导致模型设计器崩溃
真正棘手的点在于:模型设计器的缩放异常不是单一配置能解决的,它是 DPI 感知缺失 + 自绘渲染路径 + 多屏坐标管理三者叠加的结果。你调一个参数,很可能只是把问题从界面上推到了逻辑层。


















