Printing 二维码ActiveX控件:打印时控件的位置不同

Printing 二维码ActiveX控件:打印时控件的位置不同,printing,mfc,activex,ondraw,cdc,Printing,Mfc,Activex,Ondraw,Cdc,我试着在谷歌上搜索很多键,比如COleControl、IOleInPlaceSite。。。。 但我还是不知道。 我知道当activex控件处于非活动状态时,容器不会为activex控件创建窗口! 因此,rect将与Ondraw不同! 如何使控件位于同一位置? 在ReportViewer中,我可以控制二维码的位置! 但当我把它打印到PDF时,它总是在纸的左上角! 谢谢你的帮助 ` void CQRControlCtrl::OnDraw(CDC* pDC, const CRect& rcBo

我试着在谷歌上搜索很多键,比如COleControl、IOleInPlaceSite。。。。 但我还是不知道。 我知道当activex控件处于非活动状态时,容器不会为activex控件创建窗口! 因此,rect将与Ondraw不同! 如何使控件位于同一位置? 在ReportViewer中,我可以控制二维码的位置! 但当我把它打印到PDF时,它总是在纸的左上角! 谢谢你的帮助

`
void CQRControlCtrl::OnDraw(CDC* pDC, const CRect& rcBounds, const CRect& rcInvalid)
{
    if(*m_DataText == NULL )
        m_DataText = L"";       

    LPWSTR szText = m_DataText.GetBuffer(m_DataText.GetLength());   

    int nSize = m_qSize;
    int nMargin = m_qMargin;

    BOOL bPrinting = pDC->IsPrinting();

    if (!pDC)
        return;

    double PixelsPermmX = (*pDC).GetDeviceCaps(LOGPIXELSX);
    double PixelsPermmY = (*pDC).GetDeviceCaps(LOGPIXELSY);

    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetWindowExt(48,48);   
    pDC->SetViewportExt(PixelsPermmX,PixelsPermmY); 

    HBITMAP hbitmap = GetHBitmapW(szText, nMargin, nSize, QR_ECLEVEL_M);    

    CBitmap *pBitmap=CBitmap::FromHandle(hbitmap);
    BITMAP bitmap;
    GetObject(hbitmap,sizeof(BITMAP),&bitmap);

    int nHeight = bitmap.bmHeight;
    int nWidth = bitmap.bmWidth;

    CRect rect;
    this->GetRectInContainer(rect);

    CDC MemDC;      
    MemDC.CreateCompatibleDC(pDC);  
    MemDC.SelectObject(pBitmap);    

    pDC->StretchBlt(rect.left,rect.top,nWidth,nHeight,&MemDC,0,0,nWidth,nHeight,SRCCOPY);
}`