详细介绍“打印对话框的使用“的代码
·
书籍:《Visual C++ 2017从入门到精通》的3.8.6 打印对话框的使用
环境:visual studio 2022
内容:[例 3.15] 打印对话框的使用
说明:以上内容大部分来自腾讯元宝。
1.新建对话框工程
//该函数用于打印指定文本,支持两种模式:
//
//交互模式:显示打印对话框(bShowPrintDlg = TRUE),允许用户选择打印机、设置打印参数。
//静默模式:直接使用默认打印机设置(bShowPrintDlg = FALSE),无用户交互。
void CTest315Dlg::PrintText(CString str, BOOL bShowPrintDlg)
{
HDC PrintDC;
/*初始化打印信息
作用:定义打印任务元数据。
cbSize:结构体大小,必填。
lpszDocName:任务名称,显示在打印机队列中。
lpszOutput:指定输出文件路径(NULL 表示直接打印)。*/
DOCINFO docin;
docin.cbSize = sizeof(DOCINFO);
docin.lpszDocName = _T("打印测试文件");
docin.lpszOutput = NULL;
/*打印对话框配置
参数解析:
TRUE:显示打印设置对话框(非打印预览)。
PD_ALLPAGES:默认全选页面。
PD_NOPAGENUMS:隐藏页码输入框。
引用来源:CPrintDialog 构造函数参数定义见 。*/
CPrintDialog PrintDialog(TRUE, PD_ALLPAGES | PD_NOPAGENUMS, NULL);
if (bShowPrintDlg)
{
if (PrintDialog.DoModal() != IDOK)
{
return;
}
}
else
{
if (!PrintDialog.GetDefaults())
{
return;
}
}
/*设备上下文获取
CreatePrinterDC:创建打印机设备上下文(HDC)。
GetDevMode:获取打印机设备模式(DEVMODE),用于修改打印参数。*/
PrintDC = PrintDialog.CreatePrinterDC();
DEVMODE* lpDevMode = (DEVMODE*)PrintDialog.GetDevMode();
lpDevMode->dmPaperSize = DMPAPER_USER; // 自定义纸张类型
lpDevMode->dmFields |= DM_PAPERSIZE; // 标记修改字段
lpDevMode->dmPaperLength = 300; // 设置纸张长度(单位:0.1毫米)
ResetDC(PrintDC, lpDevMode);
/*打印流程
StartDoc / EndDoc:管理打印作业生命周期。
StartPage / EndPage:分页控制。
TextOut:在页面左上角(0, 0) 输出文本,未考虑页边距。*/
StartDoc(PrintDC, &docin); // 开始打印作业
StartPage(PrintDC); // 开始一页
TextOut(PrintDC, 0, 0, str, str.GetLength()); // 绘制文本
EndPage(PrintDC); // 结束当前页
EndDoc(PrintDC); // 结束打印作业
//资源释放
if (DeleteDC(PrintDC))
{
return;
}
else
{
AfxMessageBox(_T("打印出错"), MB_OK);
return;
}
}
3.增加"显示打印对话框后打印"和"不显示打印对话框直接打印"按钮并分别实现单击事件
void CTest315Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
PrintText(L"一二三四", TRUE); //显示打印对话框
}
void CTest315Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
PrintText(L"一二三四", FALSE); //不显示打印对话框
}
4.编译执行,效果如下


相关内容:
CPrintDialog和CPageSetupDialog的差異-CSDN博客
https://blog.csdn.net/qq_20725221/article/details/147332469?spm=1001.2014.3001.5501详细介绍DOCINFO结构体-CSDN博客
https://blog.csdn.net/qq_20725221/article/details/147334021?spm=1001.2014.3001.5501HDC(设备上下文句柄)详解-CSDN博客
https://blog.csdn.net/qq_20725221/article/details/147334186?spm=1001.2014.3001.5501
更多推荐


所有评论(0)