如何在VC文档视图结构中,编程实现自定义纸张的打印?高手指教!!!!!
我用MFC文档视图结构的打印方法,但打印预览和打印都是同一个纸型,我该如何编程设置我自己需要的纸张大小呢,请高手指教!!!!! 问题点数:0、回复次数:10Top
1 楼memory_xj(青蛙)回复于 2004-09-02 00:11:13 得分 0
一般打印程序会根据你的CScrollView::SetScrollSizes( int nMapMode, SIZE sizeTotal, const SIZE& sizePage = sizeDefault, const SIZE& sizeLine = sizeDefault );
来打印,你可以设定sizeTotal来自定义大小。但这时你又想在打印时用另一种大小,可以判断 CDC::IsPrinting来确定当前是否在打印状态,如果是TRUE,表示正在打印,你可以调用SetScrollSizes ()设定纸张的不同大小而实现和视图显示不同的打印目的。Top
2 楼bluebohe(薄荷)回复于 2004-09-02 00:21:26 得分 0
OnPreparePrinting(CPrintInfo* pInfo)里面修改pInfo
DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(pInfo->m_pPD->m_pd.hDevMode);
//这里修改pDevMode的dmOrientation、dmPaperSize、dmPaperLength、dmPaperWidth成员
::GlobalUnlock(pInfo->m_pPD->m_pd.hDevMode);
Top
3 楼dkp999(dkp99)回复于 2004-09-02 21:08:48 得分 0
我是这样做的啊,但预览时还是没有变化啊,??????能给我个代码吗?Top
4 楼laiyiling(陌生人[MVP])回复于 2004-09-02 22:50:05 得分 0
使用自定义纸张要先设置pDevMode->dmPaperSize=0;
这里有篇文章可供参考:
http://www.vccode.com/file_show.php?id=2164
Top
5 楼dkp999(dkp99)回复于 2004-09-04 14:28:44 得分 0
大家帮我看看,我下面那里有问题啊?
HDC PrintDC;
DOCINFO docin;
docin.cbSize = sizeof(DOCINFO);
docin.lpszDocName = "TestDoc";
docin.lpszOutput = NULL;
CPrintDialog PrintDialog(TRUE,PD_ALLPAGES|PD_NOPAGENUMS,NULL);
if(!PrintDialog.GetDefaults()) return; //如果不用打印设置对话框,使这一行有效
// if(PrintDialog.DoModal()!=IDOK)
// return; //显示打印设置对话框(不显示把这一行去掉)
PrintDC = PrintDialog.CreatePrinterDC(); // 返回一个打印DC句柄
//重新定义纸张大小
DEVMODE* lpDevMode = (DEVMODE*)PrintDialog.GetDevMode();
lpDevMode->dmFields |= DM_PAPERSIZE; //允许重新设置纸张大小
lpDevMode->dmPaperSize = DMPAPER_USER; //设定为自定义纸张尺寸
lpDevMode->dmPaperLength = m_nHeight;
lpDevMode->dmPaperWidth=m_nWidth;
ResetDC(PrintDC,lpDevMode); //使设置的参数发挥作用
StartDoc(PrintDC,&docin); // 启动打印工作
StartPage(PrintDC); // 一页开始
TextOut(PrintDC,0,10,"打印内容",8); //打印内容
EndPage(PrintDC); // 一页结束
EndDoc(PrintDC); // 终止打印工作
if(DeleteDC(PrintDC))
return; // 删除打印机DC
else
{
AfxMessageBox("出错",MB_OK);
return;
}
Top
6 楼weakwater(我是河南人)回复于 2004-09-06 17:50:10 得分 0
帮你UPTop
7 楼lixiaosan(小三)回复于 2004-09-06 17:53:01 得分 0
DEVMODE结构里面有
short dmPaperSize;
short dmPaperLength;
short dmPaperWidth;
Top
8 楼lixiaosan(小三)回复于 2004-09-06 17:59:57 得分 0
http://sanjianxia.myrice.com/vc/111.htmTop
9 楼countryboy(沉淀)回复于 2004-09-06 20:22:12 得分 0
学习`~!~!~~Top
10 楼dkp999(dkp99)回复于 2004-09-14 16:09:14 得分 0
和我的差不多啊,不行的啊,谁有更好的代码啊Top




