点打印机预览,会出内存访问错误:
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
请问怎么回事儿?
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
请问怎么回事儿?
TRACE1("%d\n",originY);
pDC->SetViewportOrg(0,(-1) *originY);
这是什么意思?怎么把设备设置成pDC->SetViewportOrg(0,(-1) *originY);
这样的大小,有问题吧
pdc的原点设置为负的一页的高度阿,这样就显示第二页了啊!关键是为什么pInfo变成nUll了呢?
(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);
//确定视口大小
}
{
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);
}
}
你写得和我的一样啊,只不过是把CScrollView::OnPrepareDC(pDC, pInfo);放在前面了
我试了一下,显示第二页的时候,pInfo还是空啊
还是出错、推出
请问有什么地方用pInfo乐呢?