visual-c++ - 如何将 OCX 绘制到 CBitmap (MFC, c++)
问题描述
如何将 OCX(我确实有源代码)绘制到 CBitmap-Object 或类似的东西上?
背景:我的客户创建 PDF 文档,其中部分文档是 OCX 的输出。PDF-lib-Interface 具有将图像从 CBitmap-Object 放入 PDF-Page 的方法。所以我想做的是让程序创建一个 CBitmap-Object,将它传递给 OCX 让它将其内容绘制到它上面,然后将他的 CBitmap 传递给 PDF 库以将其放入文档中。所以主要问题是:如何将我的 ocx 绘制到 CBitmap-Object 中?
我正在使用 Visual C++、Windows、MFC/ATL。非常感谢
解决方案
实际上,我没有设法将 OXC 渲染为 a CBitmap
(只是绘制了一个黑框),但渲染为 anATL::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;
}
}
推荐阅读
- c# - 协商身份验证和 Microsoft.AspNetCore.Mvc.Testing
- java - 迭代器比较和删除
- python - 将具有不同结构的 csv 导入字典
- python - 如果存在于另一个数据框中,则从熊猫数据框中删除行
- c# - 如何从 Windows Active Directory 获取当前详细信息
- web-services - Prestashop - PSWebServiceLibrary - Webservice CRUD 属性完整列表
- c - 计算只有元音的子串数
- wpf - Datagrid 列标题模板绑定不适用于多个实例
- authentication - Drools JBPM 流程 - 对 SSL 认证 API 进行 REST 调用
- ipmi - 通过串口使用脚本更改 supermicro BIOS 设置