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 関数呼び出しが多数あることに気付きました。表示画面の座標を使用して、実際の表示画面にビットマップを描画していると思います。しかし、私は本当に確信が持てず、明確化を望んでいました。ありがとう!