VC++6.0下GIS打印输出控制的实现
2008-11-14 19:37:04 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劎绮妵鍕箳鐎n亞浠鹃梺闈涙搐鐎氫即鐛崶顒夋晬婵絾瀵ч幑鍥蓟閻斿摜鐟归柛顭戝枛椤牆顪冮妶搴′簼缂侇喗鎸搁悾鐑藉础閻愬秵妫冮崺鈧い鎺戝瀹撲礁鈹戦悩鎻掝伀缁惧彞绮欓弻娑氫沪閹规劕顥濋梺閫炲苯澧伴柟铏崌閿濈偛鈹戠€n€晠鏌嶆潪鎷屽厡闁汇倕鎳愮槐鎾存媴閸撴彃鍓卞銈嗗灦閻熲晛鐣烽妷褉鍋撻敐搴℃灍闁绘挻娲橀妵鍕箛闂堟稐绨肩紓浣藉煐濮樸劎妲愰幘璇茬闁冲搫鍊婚ˇ鏉库攽椤旂》宸ユい顓炲槻閻g兘骞掗幋鏃€鐎婚梺瑙勬儗閸樺€熲叺婵犵數濮烽弫鍛婃叏椤撱垹纾婚柟鍓х帛閳锋垶銇勯幒鍡椾壕缂備礁顦遍弫濠氱嵁閸℃稒鍊烽柛婵嗗椤旀劕鈹戦悜鍥╃У闁告挻鐟︽穱濠囨嚃閳哄啰锛滈梺褰掑亰閸欏骸鈻撳⿰鍫熺厸閻忕偟纭堕崑鎾诲箛娴e憡鍊梺纭呭亹鐞涖儵鍩€椤掑啫鐨洪柡浣圭墪閳规垿鎮欓弶鎴犱桓闂佸湱枪閹芥粎鍒掗弮鍫熷仺缂佸顕抽敃鍌涚厱闁哄洢鍔岄悘鐘绘煕閹般劌浜惧┑锛勫亼閸婃牠宕濋敃鈧…鍧楀焵椤掍胶绠剧€光偓婵犱線鍋楀┑顔硷龚濞咃絿妲愰幒鎳崇喓鎷犻懠鑸垫毐闂傚倷鑳舵灙婵炲鍏樺顐ゆ嫚瀹割喖娈ㄦ繝鐢靛У绾板秹寮查幓鎺濈唵閻犺櫣灏ㄥ銉р偓瑙勬尭濡繂顫忛搹鍦<婵☆垰鎼~宥囩磽娴i鍔嶉柟绋垮暱閻g兘骞嬮敃鈧粻濠氭偣閸パ冪骇鐎规挸绉撮—鍐Χ閸℃ê闉嶇紓浣割儐閸ㄥ墎绮嬪澶嬪€锋い鎺嶇瀵灝鈹戦埥鍡楃仯闁告鍕洸濡わ絽鍟崐鍨叏濡厧浜鹃悗姘炬嫹

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分别为打印比例、打印图高、打印图距图纸原点的左、上边距。完成此工作后就可以进行打印控制。
更多精彩
赞助商链接