我正在使用 Cairo 将旧的 Windows 95 MFC 代码转换为 C++11 的项目。由于我不熟悉MFC,我对原始程序中用于绘图的不同坐标空间感到困惑,并且很难找到解释这些功能的信息和示例。
这就是我所看到的。在代码中,似乎有一次使用 CreateCompatibleDC 创建了一个新的 CDC 设备上下文。随后创建位图对象。然后使用 SelectObject 函数将此位图设置为新的设备上下文。据我所知,这是一个 DDB 设备相关位图。
例如:
bmp_dc = new CDC();
bmp_dc->CreateCompatibleDC(NULL);
int num_bits_per_pixel = bmp_dc->GetDeviceCaps(NUMBITSPIXEL);
int num_planes = bmp_dc->GetDeviceCaps(NUMPLANES);
c_bmp = new CBitmap();
c_bmp->CreateBitmap(width, height,num_planes,num_bits_per_pixel,NULL);
bmp_dc->SelectObject(c_bmp);
然后这个新的设备上下文被传递给许多使用它执行绘图操作的类(bmp_dc->MoveTo()、LineTo、Ellipse 等)。我的问题是,所有这些使用该设备上下文的绘图操作是否都直接绘制到位图中而不是显示屏幕上?而且,他们是否假设位图左上角是绘图时的原点?
我注意到稍后会发生许多 BitBlt 函数调用,我认为他们正在使用显示屏幕坐标将位图绘制到实际显示屏幕上。但我真的不确定,并希望得到一些澄清。谢谢!