描述:
请问我改怎么自定义打印纸张大小,就是在打印预览的时候可以看到我设置好的纸张大小,例如我设置的纸张是(500 X 500),那么就可以看到一个正方形的打印预览图,并且打印也会按照我设置的大小打印
最好是有源码相送(sgzou@newsky.com.cn)
解决方案1:
我这里测试通过的一段代码,你给放到 C****App::InitInstance()的最后测试一下
PRINTDLG pd;
pd.lStructSize=(DWORD)sizeof(PRINTDLG);
BOOL bRet=AfxGetApp()->GetPrinterDeviceDefaults(&pd);
if(bRet)
{
// protect memory handle with ::GlobalLock and ::GlobalUnlock
DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(pd.hDevMode);
pDevMode->dmFields|=DM_PAPERSIZE;
pDevMode->dmFields|=DM_PAPERLENGTH;
pDevMode->dmFields|=DM_PAPERWIDTH;
// pDevMode->dmOrientation=2;
pDevMode->dmPaperSize=0;
pDevMode->dmPaperLength=2000;
pDevMode->dmPaperWidth=2000;
::GlobalUnlock(pd.hDevMode);
}
greensofter(勇敢一点)
你的方式只是设置DC范围,不是设置纸张大小啊
忘掉一句,使用自定义纸张,必须设置pDevMode->dmPaperSize=0;
解决方案4: 看一下这些代码,主要是
DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(dlg.m_pd.hDevMode);
pDevMode->dmPaperLength=5000;
pDevMode->dmPaperWidth=5000;
::GlobalUnlock(dlg.m_pd.hDevMode);
void PrintTest()
{
CPrintDialog dlg(FALSE, PD_ALLPAGES | PD_COLLATE | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE);
if(dlg.GetDefaults())
{
DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(dlg.m_pd.hDevMode);
pDevMode->dmPaperLength=5000;
pDevMode->dmPaperWidth=5000;
::GlobalUnlock(dlg.m_pd.hDevMode);
DOCINFO di;
memset( &di, 0, sizeof(DOCINFO) );
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "Printing Test";
di.lpszOutput = (LPTSTR) NULL;
di.fwType = 0;
HDC hDC=dlg.CreatePrinterDC();
CDC dc;
dc.Attach(hDC);
dc.StartDoc(&di);
dc.StartPage();
dc.MoveTo(0,0);
dc.LineTo(1000,1000);
dc.EndPage();
dc.EndDoc();
dc.DeleteDC();
}
}