MFC怎样使打印时不弹出CPrintDialog 直接指定默认打印机打印

SF0606 2010-08-16 09:05:26
如题 就想在点按钮之后直接打印 我把DoModle删了 但是运行是会出错误 一定是doModle对CPrintDialog做了一些初始化的工作吧 能不能在代码中自己处理 以下是我现在的代码:

//打印
void ReportPrint::Print(BOOL bDirect)
{
DWORD dwflags=PD_ALLPAGES | PD_NOPAGENUMS | PD_USEDEVMODECOPIES | PD_SELECTION | PD_HIDEPRINTTOFILE;
CPrintDialog dlg(bDirect,dwflags,NULL);

if(dlg.DoModal()==IDOK)
{

CDC dc;

//定义打印模式信息
LPDEVMODE dev = dlg.GetDevMode();

dev->dmPaperSize = DMPAPER_USER;
dev->dmPaperLength = m_paperSize.cy * 10;
dev->dmPaperWidth = m_paperSize.cx * 10;
dev->dmFields = DM_PAPERSIZE | DM_PAPERWIDTH | DM_PAPERLENGTH | dev->dmFields;
dev->dmFields = dev->dmFields | DMBIN_MANUAL;
dev->dmDefaultSource = DMBIN_MANUAL;

strcpy((char*)dev->dmFormName,"自定义");
dc.Attach(dlg.CreatePrinterDC()); //打印机DC构造完成

dc.StartDoc("print");

CFont font;
font.CreatePointFont(atoi(m_csHeight)*10,m_csFaceName,&dc);

dc.SelectObject(&font); //设置用户配置字体

for (int i=0;i<m_nMaxPage;i++)
{
dc.StartPage();
for (int j=0;j<POINT_COUNT;j++)
{
dc.TextOut(m_printPoint[j].x*10,m_printPoint[j].y*10,m_pPrintInfo[i].text[j]);
}
dc.EndPage();
}
dc.EndDoc();
font.DeleteObject();
dc.DeleteDC();
}

}


求教高手 该怎么改才好
...全文
909 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
luihejun 2011-03-04
  • 打赏
  • 举报
回复
hAO HELLO
zouyingbin 2011-01-20
  • 打赏
  • 举报
回复
3楼的方法用到了外挂技术,厉害!
SF0606 2010-08-21
  • 打赏
  • 举报
回复
楼上的解决方法 好勉强....
xiuxianshen 2010-08-18
  • 打赏
  • 举报
回复
不用模态对话框,用非模态,然后让窗口不要显示不就OK了
SF0606 2010-08-18
  • 打赏
  • 举报
回复
没人顶起 很少有人这么用啊 问题已经解决了 调用dlg.getDefault()就行 谁来接一下 别把分浪费了
SF0606 2010-08-16
  • 打赏
  • 举报
回复
我单步调试发现 去掉dlg.DoModle后 dlg.GetDevMode取到空指针 估计把这个解决了就好了

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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