【发布时间】:2011-01-02 15:19:10
【问题描述】:
我有一个过程控制系统。它有一个巨大的 2D 工作区,所有逻辑都在其中布局。 2D 工作空间是一个坐标系。 您通常不会一次看到整个工作区,而是其中一些放大的部分专注于受控过程的某些部分。此类子系统视图被标记为预定义的命名图像(发电机 1、柴油发电机、主润滑泵等)。
此工作区与许多旧版 MFC 软件组件交互,这些组件单独将图形贡献到工作区(设备上下文传递给所有贡献者)。
现在,其中一个软件组件将 AutoCAD 绘图渲染到表面上。但是,设备上下文的分辨率对于这项工作的细节来说是不够的。不幸的是,设备上下文逻辑分辨率是由我们自己的坐标系决定的,在高缩放级别下,它与设备单位(像素)完全不同。 例如,使用
绘制的线DC.MoveTo(1,1);
DC.LineTo(1,2);
.... 实际上,即使它只是通过增加一个逻辑单元直接绘制到设备上下文上,也会在屏幕上覆盖相当长的距离。但是线的宽度仍然只有一个设备像素。圆看起来很高分辨率,但它的数据(中心点和半径)只能以粗略的增量完成。
我考虑了以下选项: * 加载和显示预定义图像时,创建具有更合适分辨率的设备上下文。那么问题将是其他图形提供者使用旧的逻辑单元与其交互,当用于新的 DC 时会导致图形元素太小和移位。
我想知道我是否可以创建一些 DC 包装器,通过不同的 API 接受这两种坐标,然后在内部将其转换为高分辨率坐标。
是否可以有两个具有不同逻辑/设备单元比率的 DC?并将它们都渲染到屏幕上?
我提到过一个像素的宽度可以很好地渲染一个圆,即使它的位置和半径受到限制。垂直线也被渲染得很漂亮,即使端点只能在粗坐标中给出。这让我相信,在 DC 逻辑坐标中只能用小数描述的区域在技术上是可行的。
有人知道该怎么做吗?
【问题讨论】:
标签: c++ winapi graphics mfc gdi