书籍:《Visual C++ 2017从入门到精通》的3.8.6 打印对话框的使用

环境:visual studio 2022

内容:[例 3.15] 打印对话框的使用

说明:以上内容大部分来自腾讯元宝。

1.新建对话框工程

一个简单的对话框程序-CSDN博客https://blog.csdn.net/qq_20725221/article/details/146396703?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522d04c513b850b06d55102b36c83a4515f%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=d04c513b850b06d55102b36c83a4515f&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-146396703-null-null.nonecase&utm_term=%E5%AF%B9%E8%AF%9D%E6%A1%86&spm=1018.2226.3001.44502.增加PrintText()方法

//该函数用于​​打印指定文本​​,支持两种模式:
//
//​​交互模式​​:显示打印对话框(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

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐