打印 设置DPi不能成功

我是苦力 2008-10-16 10:38:57
LPDEVMODE  lpDevMode;
CPrintDialog printDlg(FALSE);

// printDlg.m_nFlags = !PD_ALLPAGES | !PD_NOPAGENUMS | PD_PAGENUMS | PD_USEDEVMODECOPIES | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE |// PD_NOSELECTION;
printDlg.m_nFlags = PD_SELECTION | PD_USEDEVMODECOPIES;

if (printDlg.DoModal() == IDCANCEL)
return; // Get printer settings from user

dc.Attach(printDlg.GetPrinterDC());

if(AfxGetApp()->GetPrinterDeviceDefaults(&printDlg.m_pd)) //获得默认的打印机的信息
{
lpDevMode = (LPDEVMODE)GlobalLock(printDlg.m_pd.hDevMode);
GlobalUnlock(printDlg.m_pd.hDevMode);

//printDlg.m_pd.nMinPage = 1;
//printDlg.m_pd.nMaxPage = 10;
if(lpDevMode)
{
lpDevMode->dmPaperSize = DMPAPER_A4; //将打印纸设置为A4
lpDevMode->dmOrientation = DMORIENT_PORTRAIT; //将打印机设置为横向打印。
lpDevMode->dmPrintQuality = 1200 ; //修改打印分辨率为1200dpi 不成功
lpDevMode->dmYResolution = 1200; //
if(ChangeDisplaySettings(lpDevMode, CDS_RESET) != DISP_CHANGE_SUCCESSFUL)
{
MessageBox(L"Set dispaly settings error!"); //不会执行道这里
}
}
}
//下面的方法也不成功
/* LPDEVMODE lpDM = printDlg.GetDevMode();
lpDM->dmPrintQuality = 2400;
lpDM->dmYResolution = 2400;
lpDM->dmFields |= (DM_YRESOLUTION | DM_PRINTQUALITY);

dc.ResetDC(lpDM); */



执行上面的代码后,打印发现dpi值还是没有改变,对打印不是很了解,想要正确修改dpi等打印参数,要怎么做?

请高人指教,急。

问题解决,速结贴。
...全文
646 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
TanHQ1989 2021-06-20
  • 打赏
  • 举报
回复

最后解决了吗,我也遇到同样问题,想请教

我是苦力 2008-10-24
  • 打赏
  • 举报
回复
虽无满意答案,但是仍感谢两位。
特别是 Jcily
Hiiishe 2008-10-16
  • 打赏
  • 举报
回复
刚看了一下我之前写过的一个测试程序,你可能有个关键的函数没有调用,SelectPrinter。
以下这段给你参考,我程序里设置成功

CPrintDialog pd(FALSE);
AfxGetApp()->DoPrintDialog(&pd);
//pd.GetDefaults();
DEVMODE* pDevMode = pd.GetDevMode();
pDevMode->dmOrientation=DMORIENT_LANDSCAPE ;// 改为横向打印
pDevMode->dmPaperSize = DMPAPER_A5; // 纸张类型
pDevMode->dmPaperLength; // 纸张长度
pDevMode->dmPaperWidth; // 纸张宽度
pDevMode->dmScale; // 缩放比例
pDevMode->dmPrintQuality = 1400; // 打印分辨率
AfxGetApp()->SelectPrinter(pd.m_pd.hDevNames,pd.m_pd.hDevMode);
我是苦力 2008-10-16
  • 打赏
  • 举报
回复
关闭窗口后对别的参数设置如:纸张横放也不能成功。
我是苦力 2008-10-16
  • 打赏
  • 举报
回复
打印机肯定可以支持这个dpi。

我在打印dialog出来之前对dlg设置纸张横放可以成功,但是我想用户关闭打印窗口后自己再对它设置。
Hiiishe 2008-10-16
  • 打赏
  • 举报
回复
DPI不能设置成功,那么其他的几项设置成功了吗?
菜牛 2008-10-16
  • 打赏
  • 举报
回复
打印机是否支持这个分辨率?
我是苦力 2008-10-16
  • 打赏
  • 举报
回复
我是在菜单中自己增加一项叫做print菜单项,上面的一段函数就是那个菜单项的响应函数。因为项目结构的问题,不能使用mfc view/Doc 的默认那一套。
现在我想不管用户怎么修改打印设置后,我都可以自己控制打印参数,如Dpi 纸张横竖摆放、大小、等
Hiiishe 2008-10-16
  • 打赏
  • 举报
回复
你这段代码在哪个函数里面?
我是苦力 2008-10-16
  • 打赏
  • 举报
回复
哦,我的打印机是共享公司的。并不是直接接道我的机器上面的,是整个公司使用的那一个,通过网络。
我是苦力 2008-10-16
  • 打赏
  • 举报
回复

LPDEVMODE lpDM = printDlg.GetDevMode();
dc.ResetDC(lpDM);
我在你的Code后面加以上两句,在MS模拟机中看似有的像了,但是在真实的打印机中打印的确实很小的东西。
奇怪,难道模拟的和真实的相差那么远
Hiiishe 2008-10-16
  • 打赏
  • 举报
回复
应该是绘制的问题。

还有,设置打印参数时候,似乎打印机只支持设置它能够设置的一些DPI大小,例如,某打印机DPI支持为:150,300,600,1200,你就无法设置200,即使你在代码上设置200,其结果取的也可能只是最接近的一个参数,150或者300.
我是苦力 2008-10-16
  • 打赏
  • 举报
回复
to Jcily: 你的Code使用虚拟打印机出来的图像属性中看到dpi为300,这样是否说明我的dpi设置不成功呢?
因为我还怀疑是绘的问题,那么这样绘是没有问题的了?
2022年11月4日-2022年11月14日购买当前课程赠送课程学习地址如下:https://edu.csdn.net/course/detail/32434https://edu.csdn.net/course/detail/35658https://edu.csdn.net/course/detail/30223https://edu.csdn.net/course/detail/32408https://edu.csdn.net/course/detail/32429注:因赠送课程不会出现在已订阅课程列表中,以下课程学习地址一定要收藏保存。#课程服务 在线答疑:本课程设有专门的讨论留言区,学习中遇到任何问题,直接给老师留言即可,老师都会及时进行回复。远程协助:如果遇到复杂问题,老师还可进行远程协助,这个一般可不是一两百元的课程就能享受到的。源码分享:为了让大家更好的进行项目实战,老师还将课程中涉及到的所有源码分享给学员,按照视频中的提示进行下载即可。在CSDN分享C++ Qt开发知识已经有6年了,感谢众多博友对我的支持,了解到很多人对Qt的使用还是有些困扰,例如Qt环境搭建,Qt布局的使用,如何使用Qt编写复杂的界面,如何自定义非标控件,Qt如何和Web交互,Qt和后台接口如何交互等;经过这几年的整理,我决定出这套《Qt高级开发视频教程》,带领大家学习Qt高级开发知识,学习如何使用Qt开发企业级别的项目;通过本课程的学习,大家将会达到企业招聘的中高级要求。为了照顾零基础学员,本课程第一章会介绍Qt环境搭建、QtCreator / VS2019的基本使用方法,Qt整体架构、Qt信号机制,Qt内存管理等知识。即使没有Qt开发的学习经验,也能跟着课程顺利学习。课程核心知识点地图如下: 课程每章核心知识点介绍如下: 第一章:介绍Qt环境搭建、QtCreator / VS2019的基本使用方法,Qt整体架构、Qt信号机制,Qt内存管理等知识。第二章:了解到很多学员对于Qt界面布局很不熟悉,将会详细介绍Qt设计器布局,以及如何C++代码手写布局,从常见的企业级项目入手,带领大家学会各种布局的实现,例如WPS、腾讯会议、优酷、迅雷等界面的实现;界面布局会了,这是企业项目开发的第一步,还有更重要的无边框窗口,如何设计一个合理的无边框窗口很重要,第三/四章:详细介绍如何实现一个无边框窗口,如何自定义标题栏,如何实现拖拽拉伸;第四章将会介绍如何自定义非标控件,优化Qt界面。第五章:介绍Qt web混合编程,一个商用项目,必然会涉及到web交互,这也是很多Qt开发者的弱项,这一章讲详细介绍C++ Qt web混合开发。第六章:既然是做企业级项目,必然需要和后台交互,http编程也是必要的,将详细介绍http编程,用户注册,登录,后台接口请求等知识;通过第五、六章的学习,将会是你的Qt开发技术更上一层楼。第七章:介绍Qt并发编程,耗时任务处理,进程调用等知识。第八、九章:讲解 Qt 比较重要的知识,图形视图结构,以及MVD模式;通过这两章的学习,大家会对图形视图有更好的了解。第十章:本章是独立章节,主要介绍Qt中一些特殊技巧,项目编译,dpi适配、多语言等知识。第十一章:是我们的企业级项目实战:实现一个视频会议客户端,本项目可以进行多人视频通话,直播,桌面分享等功能,本项目我会从零开始,进行项目搭建,功能调试,bug fixed, 带领大家做一个企业级项目。希望通过本课程的学习,大家的C++ Qt开发技术能有质的飞越,能找到自己心仪的工作。课程中如果讲的不对的地方,请大家指出,我及时修正,我也只是一个普通开发者,也不是所有的技术都会,尽我所能,把我所会的教给大家,让我们一起为Qt的发展,尽一份绵薄之力。 下面是本课程一些项目的截图: 1 可以滑动的设置界面         2 所有图形的绘制       3 视频播放器          4 高仿youku界面         5 视频会议         相信通过本课程的学习,大家有能力实现绝大部分客户端项目,从此用C++ Qt再也不会有难写的界面。
Datamax 培训教程 Datamax打印机命名 EX系列(Extra Entry) E系列(Entry) M系列(Middle Industry) I系列(Industry) W系列(Wider) H系列(High Performance) A系列(Application) Datamax培训内容概述 打印机的脱机操作 打印机的联机操作 关于打印机的分辨率 DPL语言 打印机零部件的拆装 打印头位置的调整 打印机的脱机操作主要包括: 耗材的安装,传感器位置的调整 见稍后的实际操作。 耗材的安装需要注意的一点是:无论是内碳还是外碳机器, 碳带有碳粉的一面一定是面向标签。 ¾ 耗材的安装,传感器位置的调整 ¾ 快速测纸和标准测纸 ¾ 测试页打印 ¾ 打印机复位 快速测纸和标准测纸 快速测纸:装载耗材—开机—按住【FEED】,打印机开始进 纸,大约2~3个标签。 标准测纸:开机 -【MENU】-【MEDIA SETTING】- 【SENSOR CALIBRATION】,根据提示分别完成检测无标签, 只有标签背衬,完整标签三种状态。 测试页的打印 方法:测纸完毕-按【TEST】,根据菜单提示打印各种的测试 页,包括打印机当前配置信息 Configuration Label等等。 打印机的复位 方法1:打印机开机状态,按住【Cancel】大约4秒后放开。 方法2:关闭打印机电源,按住【Pause】+【Feed】+【Cancel】 大约17秒后放开,打印机回复出厂时的缺省设置。 练 习 20 分 钟 打印机的脱机操作 ¾ 标签,碳带的安装 ¾ 传感器位置的调整 ¾ 快速测纸和标准测纸 ¾ 基本菜单的熟悉 ¾ 打印测试标签 ¾ 打印机恢复缺省设置 打印机的连机操作主要包括: ¾ PL-Z MODE ¾ 使用BarTender打印 ¾ 通过DPL打印 ¾ 使用DATAMAX Configuration ¾ 介绍DATAMAX LOADER 使用BarTender打印 方法:安装驱动和BarTender,打开或新建一个标签,打印。 驱动:见附带光盘或从Datamax网站下载,安装略。 使用 DATAMAX Configuration 软件:见附带光盘或从Datamax网站下载,安装略 介绍:DATAMAX Configuration是一个很实用工具,基本上通 过菜单【MENU】上的设置都可以通过这个软件设置,并且 这个软件还能备份打印机当前的配置文件,直接保存为*.cfg 文件,随时恢复打印机配置的各种参数 PL-Z MODE 用途:修改此参数为PL-Z,可直接打印斑马ZPL编写的程序 设置:SYSTEM SETTINGS—INPUT MODE ,缺省为DPL DATAMAX Configuration 连接打印机 连接前必须保证需使用的端口(LPT或者COM)没有被其他的设备占用,可 通过软件中的【Host Connection】查看端口的具体使用情况。 注意:当打印设置为PL-Z模式时无法通过configuration连接打印机 DATAMAX Configuration 配置文件的保存和恢复 当用户修改打印机参数混乱,可通过此项功能恢复打印机到以前保存的配置。 具体步骤:通过LPT或COM口成功连接打印机 通过User Functions ,可以看 但前机器 的配置参 数,点击 保存即可 可备份为 *.cfg文件 修改参数后或者直接file-open 以前备份的配置文件,点击 上图红色标记中的保存,即 可修改或恢复打印机配置。 DATAMAX Configuration 发送文件 User Functions-Send File,如: 装载字体或者升级firmware等等。 DATAMAX LOADER 软件:从Datamax网站下载,安装略。 用途:向打印机发送文件和升级firmware等,和上面Send File的功能类似 不同:发送文件时能看到进度条,更直观;当打印设置为PL-Z模式的时, configuration不能连接打印机,这时可通过这个软件做发送文件等操作。 使用DPL打印 见后续DPL语言。 练 习 15 分 钟 打印机的连机操作 ¾ PL-Z模式的修改 ¾ Configuration的安装和使用(备份/恢复数据,发 送文件,修改参数等) ¾ LOADER的安装和使用 关于打印机的分辨率 单位:dpi 单位:inch/dots 单位:mil/dots 200 1/200 5 300 1/300 3.3 400 1/400 2.5 600 1/600 1.67 DPI:Dots Per Inch 每个英寸上所能印刷的点数 1 inch = 1000 mil 1 mil = 1/1000 mil 1 inch = 2
1.扫描表格 把原表格放入扫描仪,扫描分辨率设定为100dpi、缩放比设为100、模式为黑白文本。在预览图形上调整扫描区域框使它尽量靠近表格边框,你也可以在扫描后再用图形处理软件进行修剪,去除表格周围的空白,再将扫描的图像处理后保存好。 如果在表格外也要填写的话,那么在扫描前最好先用铅笔在原表格上画一个边框,作为扫描后修剪和量取页边距的依据。 2.设置背景 启动Excel 2003,单击菜单栏的“格式/工作表/背景…”,打开工作表背景对话框,找到刚才保存的表格图像,设定为背景。单击工具栏上显示比例的下拉列表框,在框中直接输入105后回车,把显示比例设定为105%。 注意:这里105%的比例是这样得来的。在纸上画一个边长10厘米的正方形,扫描后设为电子表格背景,此时比例为100%,用绘图工具栏中的“矩形”工具画一个与背景正方形完全重合的矩形,打印出来。量得打印出正方形边长为10.5厘米,除以原正方形的边长10厘米,可得比例为105%。另外,你也可以在Excel中画一个边长为10厘米的正方形,再试着慢慢调整比例,使它与背景正方形重合,亦不难得到相应的比例。 3.定位填写 通过拖动行、列标题的边界调整行高或列宽,再配合使用格式工具栏中的“合并及居中”按钮,调整表格线使它与背景表格的表格线重合(也不必很准确,只要能让文字填写在所需位置就可以)。对于大量等高(宽)的行(列),全部选中并从菜单样中的“格式/行/行高(列/列宽)”中直接输入数值会更快些。然后在相应单元格里输入数据、文字或公式引用(如图),记住千万不要设置单元格边框,这样一张表格就做好了。 4.页面设置 单击菜单栏中的“文件/页面设置…/页边距”,用尺子量取原表格纸中表格边框到纸张左边和上边的距离,把量取的尺寸直接输入页面设置对话框中相应的左、上页边距中,右、下边距则要设小一点,让整张表格都可以打印出来就行了。单击“选项”按钮,进入打印设置界面自定义纸张尺寸,直接输入纸张的尺寸,这当然也要直接用尺子测量。 部分打印设置中可能没有自定义纸张尺寸的功能,此时我们只要从“文件/页面设置/页面/纸张大小”中选一个比实际纸张大点的纸张尺寸,一般也可以正常打印。 5.打印输出 现在可以把原表格纸放入打印打印了,如果以上操作均无误的话,一般无须调整即可一次成功。即使出现水平或垂直移位,也只要直接量取偏移值,然后增减到相应的上、左页边距中即可。在此我们设置为背景的表格虽然在屏幕上可以看到,但是并不会被打印出来,所以无须考虑。 这种套打表格的方法特别适用于打印大量的相关表格。像财务、税务和统计这三种报表中的数据都是密切相关的。如果把这些相关的报表都存放在同一工作簿内,设置好不同工作表间的相互引用和计算公式。以后我们只要输入几个基本数据就可以自动计算套打出一套完整的报

16,472

社区成员

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

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

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