Я работаю над проектом, переводящим старый код MFC Windows 95 на C++ 11 с использованием Cairo. Поскольку я не знаком с MFC, я запутался в разных координатных пространствах для рисования в оригинальной программе, и сложно найти информацию и примеры, объясняющие эти функции.MFC Device Context SelectObject Рисование к растровому изображению
Итак, вот что я вижу. В коде кажется, что в какой-то момент появляется новый контекст устройства CDC, который создается с помощью CreateCompatibleDC. Затем создается растровый объект. Затем это растровое изображение устанавливается в новый контекст устройства с помощью функции 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, которые происходят позже, и я думаю, что они вытаскивают растровое изображение на фактический экран, используя координаты экранов экрана. Но я действительно не уверен, и надеялся на некоторое разъяснение. Благодаря!
Большое спасибо за информативный ответ, это очень ценится! :) – user1930581