有写过打印预览和打印设置的朋友进来看下,100分求问题解决.

NeoHeart 2005-09-23 12:42:29
有写过打印预览和打印设置的朋友进来看下,100分求问题解决.


我按照msdn的DocumentProperties上面的步骤,获得了当前的DEVMODE,然后把devmode的dmFormName和其他几个属性修改了,然后用

DocumentProperties把DEVMODE传回去,最后用resetDC把打印机更新,但是为什么怎么都不能对纸张进行,设置呢?
做过的朋友能给点帮助么?主要看我代码流程错在哪里了

BYTE * aDev; //working DevMode
DEVMODE DevIn;
HANDLE hPrinter;
Char *PrinterName=Printer()->Printers->Strings[1].c_str(); //current printerName
OpenPrinter(PrinterName,&hPrinter,NULL);
long dwNeeded=DocumentProperties(NULL,hPrinter,
PrinterName,0,0,0);//get the size of Buffer

aDev=new BYTE[dwNeeded];



DocumentProperties(NULL,hPrinter,
PrinterName,(DEVMODE*)aDev,0,DM_OUT_BUFFER); //output Buffer

memcpy(&DevIn,aDev,sizeof(DevIn));

DevIn.dmPaperSize=DMPAPER_LETTER;
DevIn.dmFields = DevIn.dmFields |DM_PAPERSIZE;

memcpy(aDev,&DevIn,sizeof(DevIn));

DocumentProperties(NULL,hPrinter,PrinterName,(DEVMODE*)aDev,(DEVMODE*)aDev,DM_OUT_BUFFER|DM_IN_BUFFER);//Input BUffer

HDC hdc=CreateDC(NULL,PrinterName,NULL,NULL);

ResetDC( hdc,(DEVMODE*)aDev );// DC information
...全文
228 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leohead 2005-09-26
  • 打赏
  • 举报
回复
看你要实现功能的层级了,如果要简单一点,用报表控件就可以很容易实现打印预览,但受限制很大,如果想要实现更强大的功能就只能在图像控件上或直接在Form上写出所有与打印相关的绘制代码了,我做过,工作量很大.

NeoHeart 2005-09-23
  • 打赏
  • 举报
回复
win2000/nt对自定义纸张要严格一些,不能直接在DevMode 的dmPaperLength,dmPaperWidth进行修改,
要先自己定义1个FORM_INFO_1的东西,然后用AddForm把他插到系统中去,
然后在DevMode 中修改字段dmFormName,
我找到了msdn上的代码,使用vb6.0写的,基本按他的步骤改成vc的代码,但是为什么我的代码怎么也不能实现?
bobob 2005-09-23
  • 打赏
  • 举报
回复
打印机支持吗?
Kudeet 2005-09-23
  • 打赏
  • 举报
回复
CPrintDialog mypd(0); // 构造打印设置对话框对象,但不显示
mypd.GetDefaults(); // 检取缺省打印设备的设备环境
DEVMODE * dm = mypd.GetDevMode(); // 提取缺省打印机的DEVMODE数据
dm->dmPaperLength = printhigh; // 定义纸张长度
dm->dmPaperWidth = printwidth; // 定义纸张宽度
如果用DEVMODE进行设置有的时候好像不会有效的。
Kudeet 2005-09-23
  • 打赏
  • 举报
回复
下面是SDK的:

PAGESETUPDLG psd; // common dialog box structure
HWND hwnd; // owner window

ZeroMemory(&psd, sizeof(PAGESETUPDLG));
psd.lStructSize = sizeof(PAGESETUPDLG);
psd.hwndOwner = hwnd;
psd.hDevMode = NULL; // Don't forget to free or store hDevMode.
psd.hDevNames = NULL; // Don't forget to free or store
hDevNames.
psd.Flags = PSD_INTHOUSANDTHSOFINCHES | PSD_MARGINS |
PSD_ENABLEPAGEPAINTHOOK;
psd.rtMargin.top = 1000;
psd.rtMargin.left = 1250;
psd.rtMargin.right = 1250;
psd.rtMargin.bottom = 1000;
psd.lpfnPagePaintHook = PaintHook;

if (PageSetupDlg(&psd)==TRUE) {
// check paper size and margin values here
}
xqk 2005-09-23
  • 打赏
  • 举报
回复
up

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧