Как я могу нарисовать OCX (у меня есть исходники) в CBitmap-Object или что-то подобное?
Справочная информация: мой клиент создает PDF-документы, и часть этих документов является выводом из OCX. Интерфейс PDF-lib имеет метод для помещения изображения из объекта CBitmap на страницу PDF. Итак, что я хочу сделать, так это позволить Программе создать CBitmap-Object, передать его в OCX, чтобы он нарисовал на нем свое содержимое, а затем передать CBitmap в библиотеку PDF, чтобы получить его в документ. Итак, главный вопрос: как нарисовать мой ocx в CBitmap-Object?
Я использую Visual C++, Windows, MFC/ATL. Большое спасибо





на самом деле мне не удалось отрендерить OXC в CBitmap (просто нарисовал черный ящик), но рендеринг в ATL::CImage и создание из него CBitmap сработало:
ATL::CImage* CPrnBasePrinter::DrawBeamerToImage(CSPCListView* pListViewWithBeamer, const CRect& rect4Beamer)
{
ASSERT(pListViewWithBeamer != nullptr);
auto* pRetVal = new CImage();
pRetVal->Create(rect4Beamer.Width(), rect4Beamer.Height(), 24);
HDC hdcImage = pRetVal->GetDC();
//Draw Control to CImage
pListViewWithBeamer->DrawBeamerToDC(HandleToLong(hdcImage),
rect4Beamer.left, rect4Beamer.top, rect4Beamer.right, rect4Beamer.bottom);
pRetVal->ReleaseDC();
return pRetVal;
}
void CPrnBasePrinter::DrawImageFromCImage(
const ATL::CImage* pImage, const CRect& rect) const
{
CBitmap* pbmp2Print = CBitmap::FromHandle(*pImage);
// Get the size of the bitmap
BITMAP bmpInfo;
pbmp2Print->GetBitmap(&bmpInfo);
//virtual - Draws the CBitmap to an Printer-DC or a PDF-Document
DrawImageFromLoadedBitmap(pbmp2Print, &bmpInfo, rect);
}
void CPrnBasePrinter::Draw()
{
//m_pListviewDataSource is an OCX capable of drawing itself into a given DC
ATL::CImage* pBeamerImage = DrawBeamerToImage(m_pListviewDataSource, CRect(0, 0, 100, 50));
if (pBeamerImage != nullptr){
DrawImageFromCImage(pBeamerImage, CRect(0, 0, 100, 50));
delete pBeamerImage;
}
}
По сути, это делается так же, как рендеринг на принтер. За исключением того, что на этот раз вам придется создать контекст устройства самостоятельно и выбрать в нем
CBitmapсоответствующего размера, прежде чем передавать контекст устройства в код рендеринга. После завершения рендеринга растровое изображение содержит визуальное представление. Обязательно выберите его из DC, прежде чем двигаться дальше.