Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16497627
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:55:04

下载本文示例代码
  VC 6.0中用应用向导生成新程序时,可以在应用向导Step4对话框中选择Printing and Print preview选择包括了基本打印和打印预览支持。但这些打印功能在MM_TEXT模式下打印出的文件尺寸大小发生了变化,比屏幕上显示的小得多。我们在VC 中实现绘图时最方便、最常用的绘图模式为MM_TEXT。如何对打印输出进行有效的控制?尤其是在GIS中,是我们经常所面临的问题。笔者通过实践,提出了自己的做法,再此与广大读者共同探讨。   首先明确的是在MM_TEXT模式下很难实现象素坐标与常用的长度单位(如毫米)的转换关系,因此有必要对绘图模式进行改变,同时不能影响以前的工作。笔者的模式设置为SetMapMode(MM_LOMETRIC),屏幕显示模式为SetMapMode(MM_TEXT),对绘图显示函数DrawVectorMap(const char *MapFile)进行重载为DrawVectorMap(const char *MapFile,CDC* pDC),为打印输出传递pDC指针,在重载函数中进行坐标变换为: void CBoundaryView::DrawVectorMap(const char *MapFile,CDC* pDC) { ……………………. for(i=0;i<(int)m4;i ) { fread(&xn[i],4,1,fp); fread(&yn[i],4,1,fp); //地图打印****坐标变换 xn[i]=(float)((xn[i]-printstartx)*print_scale page_left*100.0)//在MM_TEXT下 //每个单位为0.01cm; yn[i]=(float)((yn[i]-printstarty)*print_scale-map_heigh*100-page_up*100.0); } }   其中printstartx 、printstarty 为设定的输出原点坐标,print_scale 、map_heigh、page_left、page_up分别为打印比例、打印图高、打印图距图纸原点的左、上边距。完成此工作后就可以进行打印控制。  一、图幅尺寸与边距控制   生成图幅设置对话框类,设置对话框为CmapSetup,实现尺寸控制。 void CBoundaryView::OnPrintMapsetup() //图幅设置(对话框参数) { // TODO: Add your command handler code here CMapSetup mapsizesetup; //图幅设置(对话框参数) //对话框初始化/////////////////////////// …………………………… ///////////////////////////////////////// mapsizesetup.DoModal(); map_wide=mapsizesetup.m_Page1.m_mapwide; page_up=mapsizesetup.m_Page2.m_pageup; page_left=mapsizesetup.m_Page2.m_pageleft; } 根据图幅宽度计算图幅高度; BOOL CBoundaryView::OnPreparePrinting(CPrintInfo* pInfo) { xwide=(int)(map_wide*10.0);//图幅尺寸(mm) if(!print_selection)//全图打印 { map_heigh=map_wide*((ymax-ymin)/(xmax-xmin));//(cm) } else if(print_selection)//选择区域打印 { //计算图幅高度 map_heigh=map_wide*(print_y1-print_y2)/(print_x2-print_x1);//(cm) } yhigh=(int)(map_heigh*10.0); return DoPreparePrinting(pInfo); } 共2页。 1 2 :   VC 6.0中用应用向导生成新程序时,可以在应用向导Step4对话框中选择Printing and Print preview选择包括了基本打印和打印预览支持。但这些打印功能在MM_TEXT模式下打印出的文件尺寸大小发生了变化,比屏幕上显示的小得多。我们在VC 中实现绘图时最方便、最常用的绘图模式为MM_TEXT。如何对打印输出进行有效的控制?尤其是在GIS中,是我们经常所面临的问题。笔者通过实践,提出了自己的做法,再此与广大读者共同探讨。   首先明确的是在MM_TEXT模式下很难实现象素坐标与常用的长度单位(如毫米)的转换关系,因此有必要对绘图模式进行改变,同时不能影响以前的工作。笔者的模式设置为SetMapMode(MM_LOMETRIC),屏幕显示模式为SetMapMode(MM_TEXT),对绘图显示函数DrawVectorMap(const char *MapFile)进行重载为DrawVectorMap(const char *MapFile,CDC* pDC),为打印输出传递pDC指针,在重载函数中进行坐标变换为: void CBoundaryView::DrawVectorMap(const char *MapFile,CDC* pDC) { ……………………. for(i=0;i<(int)m4;i ) { fread(&xn[i],4,1,fp); fread(&yn[i],4,1,fp); //地图打印****坐标变换 xn[i]=(float)((xn[i]-printstartx)*print_scale page_left*100.0)//在MM_TEXT下 //每个单位为0.01cm; yn[i]=(float)((yn[i]-printstarty)*print_scale-map_heigh*100-page_up*100.0); } }   其中printstartx 、printstarty 为设定的输出原点坐标,print_scale 、map_heigh、page_left、page_up分别为打印比例、打印图高、打印图距图纸原点的左、上边距。完成此工作后就可以进行打印控制。  一、图幅尺寸与边距控制   生成图幅设置对话框类,设置对话框为CmapSetup,实现尺寸控制。 void CBoundaryView::OnPrintMapsetup() //图幅设置(对话框参数) { // TODO: Add your command handler code here CMapSetup mapsizesetup; //图幅设置(对话框参数) //对话框初始化/////////////////////////// …………………………… ///////////////////////////////////////// mapsizesetup.DoModal(); map_wide=mapsizesetup.m_Page1.m_mapwide; page_up=mapsizesetup.m_Page2.m_pageup; page_left=mapsizesetup.m_Page2.m_pageleft; } 根据图幅宽度计算图幅高度; BOOL CBoundaryView::OnPreparePrinting(CPrintInfo* pInfo) { xwide=(int)(map_wide*10.0);//图幅尺寸(mm) if(!print_selection)//全图打印 { map_heigh=map_wide*((ymax-ymin)/(xmax-xmin));//(cm) } else if(print_selection)//选择区域打印 { //计算图幅高度 map_heigh=map_wide*(print_y1-print_y2)/(print_x2-print_x1);//(cm) } yhigh=(int)(map_heigh*10.0); return DoPreparePrinting(pInfo); } 共2页。 1 2 : 下载本文示例代码


VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现VC 6.0下GIS打印输出控制的实现
阅读(129) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~