VC++ 6.0下GIS打印输出控制的实现

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);
}

时间: 2024-08-08 14:24:48

VC++ 6.0下GIS打印输出控制的实现的相关文章

DES算法及其在VC++6.0下的实现(下)

在<DES算法及其在VC++6.0下的实现(上)>中主要介绍了DES算法的基本原理,下面让我们继续: 二.子密钥的生成 64比特的密钥生成16个48比特的子密钥.其生成过程见图: 子密钥生成过程具体解释如下: 64比特的密钥K,经过PC-1后,生成56比特的串.其下标如表所示: PC-1 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 6

在VC++6.0下可以运行,但是移植到VS2003之后就不行了

问题描述 用DBLibrary和数据库连接有一个例子physic在VC++6.0下可以运行,但是移植到VS2003之后就不行了,不知道为什么,应该怎么设置?程序地址见file:///E:/HLA/SQL/VC++中使用%20DB-Library%20编程(SQL%20Server)%20一/VC++中使用%20DB-Library%20编程(SQL%20Server)%20-%20VC知识库文章.htm 解决方案 解决方案二:属性里面设置静态链接

在VC 6.0下如何调用Delphi开发的进程内COM

源代码包中共有两个zip文件,其中DelphiCallVCCOM.zip为Delphi调用VC的COM组件,VCCallDelphiCOM.zip为VC调用Delphi的COM组件 因为本人的语言水平很差,考大学时150的总分,我考了个60分.外语也是,初中及格过一次,会考及格过一次.其它的时间好像从没有及格过.所以我不写文章,因我一百字的文章给我写,至少要出八九个错别字.哈哈-.真是个马大哈.你别说我还真的姓马.所以下面的文章中有错误之处,请你老人家多多理解.谁叫你看我的文章了的.下面就谈正事

DES算法及其在VC++6.0下的实现(上)

摘要: 本文介绍了一种国际上通用的加密算法-DES算法的原理,并给出了在VC++6.0语言环境下实现的源代码.最后给出一个示例,以供参考. 关键字:DES算法.明文.密文.密钥.VC: 本文程序运行效果图如下: 正文: 当今社会是信息化的社会.为了适应社会对计算机数据安全保密越来越高的要求,美国国家标准局(NBS)于1997年公布了一个由IBM公司研制的一种加密算法,并且确定为非机要部门使用的数据加密标准,简称DES(Data Encrypton Standard).自公布之日起,DES算法作为

在VC++ 6.0下利用消息实现内部进程通讯

内部进程间通讯和数据交换有多种方式:消息.共享内存.匿名(命名)管道 .邮槽.Windows套接字等多种技术.其中利用消息机制实现IPC虽然同其他方法 相比有交换的数据量小.携带的信息少等缺点,但由于其实现方便.应用灵活而 广泛应用于无须大量.频繁数据交换的内部进程通讯系统之中,尤其是对于在上 层主控软件与底层工作软件之间的命令与响应上更能充分显示其良好的性能.本文就通过编制一个主控软件和一个受其操作的底层工作软件来阐述如何用VC++6.0 通过消息来实现内部进程通信. 一.Windows消息机

《C语言课程设计》一1.1 VC 6.0简介

1.1 VC 6.0简介 Visual C++ 6.0是Microsoft公司推出的开发Win32程序的集成开发环境,可将"高级语言"翻译为"机器语言(低级语言)",并支持面向对象可视化编程.它具有程序框架自动生成.灵活方便的类管理.代码编写和界面设计集成交互操作.可开发多种程序等优点,而且通过简单的设置即可使其生成的程序框架支持数据库接口.OLE和WinSock网络. Visual C++ 6.0, 简称VC 6.0或VC 6,是微软公司于1998年推出的Visu

数据结构、c语言-急!!!!为何以下程序执行第2功能离开车厂后在vc++6.0环境下程序会报错并终止运行,求解决方案

问题描述 急!!!!为何以下程序执行第2功能离开车厂后在vc++6.0环境下程序会报错并终止运行,求解决方案 #include "stdafx.h" #include #include #include #define max 5 #define pri 5 typedef struct time{ int year; int day; int month; int hour; int min; }Time; typedef struct node{ char num[10]; Tim

VC++6.0实验环境下,请问数据库程序怎么在界面显示?

问题描述 VC++6.0实验环境下,请问数据库程序怎么在界面显示? VC++6.0实验环境下,有没有简单的,包含用户登录的数据库界面编程的案例?请问数据库程序怎么在界面显示? 解决方案 http://download.csdn.net/download/chengxuaihzh/2931146 解决方案二: [C++]实验一:使用VC++6.0环境编写C++程序

跪求 帮忙-VC++6.0 环境下,怎么能够使程序运行后的黑框直接变成全屏显示

问题描述 VC++6.0 环境下,怎么能够使程序运行后的黑框直接变成全屏显示 VC++6.0 环境下,win32 console application下编一个什么样的程序能够使输出的黑框变成全屏?例如 #include main() { printf("你好n"); } 这个简单程序中添加上哪些代码就能够使输出的黑框直接占满整个电脑屏幕?麻烦哪位大侠给帮个忙,并把修改后的完整程序附上,小弟不胜感激!