在我我的程序里要打印一些报告,但是这些报告不同的页有的要求横向打印的,有的要求纵向打印,所以我在OnPrint函数里有以下的程序:
char temp[10];
sprintf (temp, "page %d.", pInfo->m_nCurPage);
if (!GetDocument()->data)
return;
pDC->SetMapMode (MM_LOMETRIC);
CPrintDialog* ppd = pInfo->m_pPD;
LPDEVMODE lpDevMode = ppd->GetDevMode();
switch (pInfo->m_nCurPage)
{
case 1: //THE FIRST PAGE workspace5.Print(pDC,strDiagRslt);
break;
case 2: //第2页要求是纵向打印
lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
pDC->ResetDC(lpDevMode);
workspace2.Print(pDC); //2 0 0
break;
case 3:
......
但是这个写法第2页还是横向的,而第3页变成了纵向的,这时为什么?
如果这样写第2页变成了纵向的:
case 1: //THE FIRST PAGE
workspace5.Print(pDC,strDiagRslt); //5 0
lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
pDC->ResetDC(lpDevMode);
break;
case 2: // 纵向
workspace2.Print(pDC);
break;
但是这样我觉得不太舒服,可读性不是很好。
是不是我编的程序哪里还是不正确?
char temp[10];
sprintf (temp, "page %d.", pInfo->m_nCurPage);
if (!GetDocument()->data)
return;
pDC->SetMapMode (MM_LOMETRIC);
CPrintDialog* ppd = pInfo->m_pPD;
LPDEVMODE lpDevMode = ppd->GetDevMode();
switch (pInfo->m_nCurPage)
{
case 1: //THE FIRST PAGE workspace5.Print(pDC,strDiagRslt);
break;
case 2: //第2页要求是纵向打印
lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
pDC->ResetDC(lpDevMode);
workspace2.Print(pDC); //2 0 0
break;
case 3:
......
但是这个写法第2页还是横向的,而第3页变成了纵向的,这时为什么?
如果这样写第2页变成了纵向的:
case 1: //THE FIRST PAGE
workspace5.Print(pDC,strDiagRslt); //5 0
lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
pDC->ResetDC(lpDevMode);
break;
case 2: // 纵向
workspace2.Print(pDC);
break;
但是这样我觉得不太舒服,可读性不是很好。
是不是我编的程序哪里还是不正确?
解决方案 »
- vc单步调试没问题,整体运行不能返回正确的值
- 安装驱动的时候总是跳出来 继续安装 让用户点击,能否不出现这个点击,而把驱动安装上?
- vc做的ACTIVEX控件 连接数据库的问题,是用ADO 连吗,客户端要装ADO吗
- GetFileVersionInfo的具体用法?
- 请教:如何使用CTreeCtrl实现类似资源管理器的树形目录?
- C++ 有绝对难度的问题!!!!!!!!!!!!!
- 急求网络协议分析软件代码,人民币购买!!!!
- 请问单击工具栏中的最小化的窗口响应什么消息?
- 用ADO的rs->GetFields()->GetItem("content")->GetChunk(lDataSize)读取大文本的问题
- MsFlexGrid VC
- 多视图问题
- 用Ado读取Excel中数据,如果同一列当中有数字单元格也有字符串单元格,那么读取的时候字符串单元格失败,怎么办?
而更改的是pDC(pDC->ResetDC(lpDevMode);),所以会出现这种情况.
workspace5.Print(pDC,strDiagRslt); //5 0
break;
case 2: // 横向的
lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
//pDC->ResetDC(lpDevMode);
pInfo->m_pPD->GetDC()->ResetDC(lpDevMode);
workspace2.Print(pDC); //2 0 0
break;
楼上的意思是不是这么做,要是这样的问题更大了:第一次打印预览的时候,所有页还是纵向的,但是第二次预览的时候又全是横向的了
workspace5.Print(pDC,strDiagRslt); //5 0
break;
case 1: // 第2页,横向的
……印象里好像应该这样,你可以尝试以下,我很久没做记不清了~
sprintf (temp, "page %d.", pInfo->m_nCurPage);
if (!GetDocument()->data)
return;
pDC->SetMapMode (MM_LOMETRIC);
CPrintDialog* ppd = pInfo->m_pPD;
LPDEVMODE lpDevMode = ppd->GetDevMode();
switch (pInfo->m_nCurPage-1)
{
case 0: //THE FIRST PAGE workspace5.Print(pDC,strDiagRslt);
break;
case 1: //第2页要求是纵向打印
lpDevMode->dmOrientation = DMORIENT_LANDSCAPE;
pDC->ResetDC(lpDevMode);
workspace2.Print(pDC); //2 0 0
break;
case 2:
......
我的多试图文档打印时,pInfo->m_nCurPage获得的第一个值是1,不是0关注中
/* 设置系统打印模式
#define DMORIENT_PORTRAIT 1 //纵向
#define DMORIENT_LANDSCAPE 2 //横向 */
/************************************************************************/
void SetLandscapeMode(int PrintMode)
{
PRINTDLG pd;
pd.lStructSize=(DWORD)sizeof(PRINTDLG);
BOOL bRet=GetPrinterDeviceDefaults(&pd);
if(bRet)
{
// protect memory handle with ::GlobalLock and ::GlobalUnlock
DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(m_hDevMode);
// set orientation to landscape
if(PrintMode==1)//纵向打印
pDevMode->dmOrientation=DMORIENT_PORTRAIT;
else if(PrintMode==2)//横向打印
pDevMode->dmOrientation=DMORIENT_LANDSCAPE;
::GlobalUnlock(m_hDevMode);
}
}
koko1998(追印) = coordinate2003(哎呀)
koko1998(追印) = coordinate2003(哎呀)
什么意思?