单文档下的对话框打印预览

huajuehan 2009-10-20 10:40:03
比如我建立了一个单文档,然后在单文档程序下又建立了一个对话框(单击单文档上的某个菜单可以弹出这个对话框),对话框上我又建了一个按钮,我想让这个按钮执行单文档框架上的打印预览功能,该如何实现呢??
有没有具体的实现方法?麻烦写详细一点!
...全文
145 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2009-10-26
  • 打赏
  • 举报
回复
打出来什么样?
huajuehan 2009-10-25
  • 打赏
  • 举报
回复
我绘的报表是人家公司要求的版面,我觉得可能是我在选择坐标时出了问题!
huajuehan 2009-10-25
  • 打赏
  • 举报
回复
帮忙看看我编的这个程序为什么不能实现打印预览与计算机无关,我的打印处理都放在虚拟的CVIEW里
void CPrintView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
CView::OnBeginPrinting(pDC, pInfo);
CPrintFrame *pFrame =(CPrintFrame *)GetParent();
pFrame->m_pCallerDlg->SendMessage(WM_BEGIN_PRINTING,(WPARAM) pDC, (LPARAM) pInfo);

printx=pDC->GetDeviceCaps(LOGPIXELSX);
printy=pDC->GetDeviceCaps(LOGPIXELSY);
ratex=(double)printx/screenx; //确定打印机与屏幕的比例
ratey=(double)printy/screeny;


pageheight=pDC->GetDeviceCaps(VERTRES);
pagewidth=pDC->GetDeviceCaps(HORZRES);

//获取打印机的左右边距

leftmargin=pDC->GetDeviceCaps(PHYSICALOFFSETX); //获取左边距
int phywidth=pDC->GetDeviceCaps(PHYSICALWIDTH);
rightmargin=phywidth-pagewidth-leftmargin;

}
void CPrintView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
CView::OnEndPrinting(pDC, pInfo);
CPrintFrame *pFrame =(CPrintFrame *)GetParent();
pFrame->m_pCallerDlg->SendMessage(WM_END_PRINTING,(WPARAM) pDC, (LPARAM) pInfo);
if(m_bPrint) //直接打印,不是预览
GetParent()->DestroyWindow();
}

void CPrintView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{

CPrintFrame *pFrame =(CPrintFrame *)GetParent();
pFrame->m_pCallerDlg->SendMessage(WM_MY_PRINT,(WPARAM) pDC, (LPARAM) pInfo) ;

titlefont.CreatePointFont(200,_T("宋体"),pDC);
bodyfont.CreatePointFont(120,_T("宋体"),pDC);
screenx=pDC->GetDeviceCaps(LOGPIXELSX);
screeny=pDC->GetDeviceCaps(LOGPIXELSY);
CRect temprect(-leftmargin+900,1300,pagewidth+rightmargin,pageheight);
temprect.DeflateRect(0,(int)(ratey*20),0,0);
pDC->SelectObject(&bodyfont);
pDC->DrawText("制造数量及编号",temprect,DT_LEFT);
temprect.DeflateRect(0,550,0,0);
pDC->DrawText("产品数量:",temprect,DT_LEFT);
temprect.DeflateRect(0,600,0,0);
pDC->DrawText("编号:",temprect,DT_LEFT);
temprect.DeflateRect(0,1850,0,0);
pDC->DrawText("供货数量及编号",temprect,DT_LEFT);
temprect.DeflateRect(0,580,0,0);
pDC->DrawText("供货数量:",temprect,DT_LEFT);
temprect.DeflateRect(0,650,0,0);
pDC->DrawText("编号:",temprect,DT_LEFT);
temprect.DeflateRect(7000,-4300,0,0);
pDC->DrawText("Q/DAEPMR15-01",temprect,DT_LEFT);
temprect.DeflateRect(3000,0,0,0);
pDC->DrawText("上海华理安全装备有限公司",temprect,DT_LEFT);
temprect.DeflateRect(0,1000,0,0);
pDC->DrawText("编号:NO",temprect,DT_LEFT);

pDC->SelectObject(&titlefont);
temprect.DeflateRect(-1700,2000,0,0);
pDC->DrawText("爆破片质量证明书",temprect,DT_LEFT);

pDC->SelectObject(&bodyfont);
temprect.DeflateRect(-300,3500,0,0);
pDC->DrawText("上 海 华 理 安 全 装 备 有 限 公 司",temprect,DT_LEFT);


/*CRect m_rect(900,1300,pagewidth+rightmargin,pageheight);
m_rect.DeflateRect(0,((double)20*ratey),0,0);
pDC->DrawText("fdsd",m_rect,DT_CENTER|DT_SINGLELINE);*/


//绘制横线
pDC->MoveTo(800,1200);
pDC->LineTo(6800,1200);
pDC->MoveTo(800,1700);
pDC->LineTo(6800,1700);
pDC->MoveTo(800,2200);
pDC->LineTo(6800,2200);
pDC->MoveTo(800,4200);
pDC->LineTo(6800,4200);
pDC->MoveTo(800,4700);
pDC->LineTo(6800,4700);
pDC->MoveTo(800,5200);
pDC->LineTo(6800,5200);
pDC->MoveTo(800,8200);
pDC->LineTo(6800,8200);
pDC->MoveTo(11800,2450);
pDC->LineTo(13000,2450);


//绘制竖线
pDC->MoveTo(800,1200);
pDC->LineTo(800,8200);
pDC->MoveTo(6800,1200);
pDC->LineTo(6800,8200);







}
huajuehan 2009-10-25
  • 打赏
  • 举报
回复
huajuehan 2009-10-22
  • 打赏
  • 举报
回复
还有一个问题,这种基于虚拟框架和视图类的打印预览,在不同的显示分辨率下,我在画图表时,会不会有影响!
向立天 2009-10-22
  • 打赏
  • 举报
回复
法过去了
注意查收
huajuehan 2009-10-22
  • 打赏
  • 举报
回复
wanghongpeng2@126.com 谢谢啦!就靠你了!
向立天 2009-10-22
  • 打赏
  • 举报
回复
打印无非就是把要画的东西在打印的设备DC上重画一遍
即便是单文档已经封装的打印预览要想实现你要求得打印效果也得重载相关函数
你既然已经基于对话框实现了打印预览的功能
那就把要打印的DC获取
自己画就好了
huajuehan 2009-10-22
  • 打赏
  • 举报
回复
那你能不能帮帮忙,给点具体实现的方法。
我现在新建了一个虚拟框架类,和虚拟视图类是可以实现功能,但我想通过调用单文档已经封装的打印预览来实现,不知道你能不能给点指点,具体怎么实现?
向立天 2009-10-22
  • 打赏
  • 举报
回复
这样吧
你留个油箱
我给你一个例子

我实现的比较简单
希望对你有帮助
huajuehan 2009-10-22
  • 打赏
  • 举报
回复
麻烦做过这个,和会做的高手指点!
向立天 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huajuehan 的回复:]
我在视图类下添加消息响应
ON_MESSAGE(WM_MY_MESSAGE, CView::OnFilePrintPreview)
在我的打印对话框下添加
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd;  //先通过获取当前框架指针
CView * active = pMF->GetActiveView();//才能获取当前视类指针
if(active != NULL)  //获取了当前视类指针才能发送消息
active->PostMessage(WM_MY_MESSAGE,0,0);  //使用PostMessage发送消息

但是打印预览窗口是出来了,就是这个窗口没有处于活动状态,工具栏上的选项都灰色不能用!
[/Quote]

没有初始话吧
打印预览窗口的功能是封装好的

在对话框下实现打印预览步骤是比较繁琐的
不是简单几句代码就能解决的
huajuehan 2009-10-22
  • 打赏
  • 举报
回复

我在视图类下添加消息响应
ON_MESSAGE(WM_MY_MESSAGE, CView::OnFilePrintPreview)
在我的打印对话框下添加
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //先通过获取当前框架指针
CView * active = pMF->GetActiveView();//才能获取当前视类指针
if(active != NULL) //获取了当前视类指针才能发送消息
active->PostMessage(WM_MY_MESSAGE,0,0); //使用PostMessage发送消息

但是打印预览窗口是出来了,就是这个窗口没有处于活动状态,工具栏上的选项都灰色不能用!
向立天 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huajuehan 的回复:]
不知道有没有方法直接在对话框里调用视图类下的打印预览!
[/Quote]

这个是可以的
网上有例子
你搜一下就有了
huajuehan 2009-10-22
  • 打赏
  • 举报
回复
不知道有没有方法直接在对话框里调用视图类下的打印预览!
huajuehan 2009-10-22
  • 打赏
  • 举报
回复
因为我要根据对话框的选项选择不同的打印预览,对话框上有很多单选按钮,点击不同的单选按钮就能够预览不同的打印。还请高手帮帮忙,已经搞了很久,还没有搞出来!
zhuweiping2003 2009-10-22
  • 打赏
  • 举报
回复
UP
向立天 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 huajuehan 的回复:]
还有一个问题,这种基于虚拟框架和视图类的打印预览,在不同的显示分辨率下,我在画图表时,会不会有影响!
[/Quote]

不会的
所谓虚拟框架和视图类是针对对话框说的
其实他们都具有框架和视图类的全部功能

而且画图时要根据打印机的设置调整分辨率
与屏幕分辨率没关系
xmrforever 2009-10-20
  • 打赏
  • 举报
回复
SDI不是有打印预览吗
向立天 2009-10-20
  • 打赏
  • 举报
回复
为什么要这么做呢?
可能会比较麻烦

15,979

社区成员

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

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