【问题标题】:How to draw an OCX to a CBitmap (MFC, c++)如何将 OCX 绘制到 CBitmap (MFC, c++)
【发布时间】:2019-10-14 01:34:55
【问题描述】:

如何将 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。 非常感谢

【问题讨论】:

  • 这基本上就像rendering to a printer 一样。除此之外,这一次您必须自己创建设备上下文,并在其中选择适当大小的CBitmap,然后再将设备上下文传递给渲染代码。渲染完成后,位图将包含视觉表示。在继续之前,请确保将其从 DC 中选择出来。

标签: visual-c++ bitmap mfc draw ocx


【解决方案1】:

实际上,我没有设法将 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;
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多