点打印机预览,会出内存访问错误:
void CMyView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
{
if(pDC->IsPrinting())
{
int pageHeight = pDC->GetDeviceCaps(VERTRES);
int originY = pageHeight*(pInfo->m_nCurPage - 1);
TRACE1("%d\n",originY);
pDC->SetViewportOrg(0,(-1) *originY);
}
CScrollView::OnPrepareDC(pDC, pInfo);
}我跟踪发现,预览第二页的时候pInfo变成了NULL
请问怎么回事儿?

解决方案 »

  1.   

    int originY = pageHeight*(pInfo->m_nCurPage - 1);
    TRACE1("%d\n",originY);
    pDC->SetViewportOrg(0,(-1) *originY);
    这是什么意思?怎么把设备设置成pDC->SetViewportOrg(0,(-1) *originY);
    这样的大小,有问题吧
      

  2.   

    我是参考书上这么写的啊
    pdc的原点设置为负的一页的高度阿,这样就显示第二页了啊!关键是为什么pInfo变成nUll了呢?
      

  3.   

    void CPrintSameView::OnPrepareDC
    (CDC* pDC, CPrintInfo* pInfo) {
    CView::OnPrepareDC(pDC, pInfo);
    pDC->SetMapMode(MM_ANISOTROPIC);
    //转换坐标映射方式 
    CSize size = CSize(800, 560);
    pDC->SetWindowExt(size); //确定窗口大小
    //得到实际设备每逻辑英寸的像素数量
    int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX); 
    int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);
    //得到设备坐标和逻辑坐标的比例
    long xExt = (long)size.cx * xLogPixPerInch/96 ;
    long yExt = (long)size.cy * yLogPixPerInch/96 ;
    pDC->SetViewportExt((int)xExt, (int)yExt);
    //确定视口大小
    }
      

  4.   

    void CMyView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
    {
    CScrollView::OnPrepareDC(pDC, pInfo);
    if(pDC->IsPrinting())
    {
    int pageHeight = pDC->GetDeviceCaps(VERTRES);
    int originY = pageHeight*(pInfo->m_nCurPage - 1);
    TRACE1("%d\n",originY);
    pDC->SetViewportOrg(0,(-1) *originY);
    }
    }
      

  5.   

    Mackz(在相互) ,你好
    你写得和我的一样啊,只不过是把CScrollView::OnPrepareDC(pDC, pInfo);放在前面了
    我试了一下,显示第二页的时候,pInfo还是空啊
    还是出错、推出
      

  6.   

    是不是别的地方使用pInfo了。
      

  7.   

    我不知道啊!
    请问有什么地方用pInfo乐呢?