mapgis6.7二次开发vc6_demo 之六(mapgis公用函数二次封装库)

时间:2021-04-17 05:41:05

mapgis6.7二次开发vc6_demo 之六(mapgis公用函数二次封装库)

///////////////////////////////////////////
//mapgis_common.cpp
//mapgis公用函数二次封装库
//vp:hsg
//create date:2012-04
//
///////////////////////////////////////////
#include "stdafx.h"
#include "resource.h"
#include <math.h>
#include "win_area.h"
#include "win_oper.h"
#include "map_out.h"
#include "demo.h"
//
extern char* AppTitle;                    //应用程序名称
extern AREA_HINST    AHInst;
extern HWND         MainWnd;              //主窗口句柄
extern HWND         GrpWnd;               //图形窗口句柄
//------------------------------------------------------------
//define function style  mapgis_common.cpp
/*
char* GetDiskSpace_lc(unsigned char dsk);
char* ltrim_lc(char* s);
char* rtrim_lc(char* s);
char* trim_lc(char* s);
char* l2cp(long n);
char* i2cp(int n);
char* d2cp(double value);
char* short2cp(short value);
char* a2u(const char* A,const char* B);
char* a3u(const char* A,const char* B,const char* C);
char* a4u(const char* A,const char* B,const char* C,const char* D);
char* a5u(const char* A,const char* B,const char* C,const char* D,const char* E);
char* a6u(const char* A,const char* B,const char* C,const char* D,const char* E,const char* F);
char* a7u(const char* a1,const char* a2,const char* a3,const char* a4,const char* a5,const char* a6,const char* a7);
char* substr_lc(const char* cs,char* fd);
char* getdir_lc(char* s,const char* d);
char* getfilenameWithEx_lc(char* s,const char* d);
char* getfilenameNoExt_lc(char* s,const char* d);
char* getprestr(char* s,const char* d);
char **GetStrArray(char* s,const char* d);
void ShowMsg(char* msg);
void TestGetDiskSpace();
void D2A_test();
char* GetGeoVctType(short ai);  //获取图层类型
*/
//------------------------------------------------------------
//long  _GetDiskSpace(unsigned char dsk)
//参数:入口   dsk 磁盘号, 1=A,2=B...
//     出口   无
//返回值 返回磁盘剩余空间的字节数
char* GetDiskSpace_lc(unsigned char dsk)
{
    long sy=_GetDiskSpace(dsk); //
	long M=sy/1024;  
	char* atitle;
	int mLen=sizeof(M);
	atitle=new char[mLen];
	ltoa(M,atitle,mLen);
	return atitle;
}
//去掉字符串首(左)空格函数
char* ltrim_lc(char* s)
{
    char* s_s=new char[strlen(s)+1];
	strcpy(s_s,s);
	char* s_rev=strrev(s_s);
    s_rev=rtrim_lc(s_rev);
	char* d_s=strrev(s_rev);
	return d_s;
}
//去掉字符串尾(右)空格函数
char* rtrim_lc(char* s)
{
	char* s_s=new char[strlen(s)+1];
	strcpy(s_s,s);
	//
    int s_len=strlen(s_s);
	for(int i=s_len-1;i>=0;i--)
	{
         if(s_s[i]==' ')
		 {
			 s_s[i]='\0';
		 }
	}
	char* d_s=new char[strlen(s_s)];
	strcpy(d_s,s_s);
	return d_s;	
}
//去掉字符串首尾空格函数
char* trim_lc(char* s)
{
    return ltrim_lc(rtrim_lc(s));
}
//long转字符串函数
char* l2cp(long n)
{
    int nLen=sizeof(n);
	char* atitle=new char[nLen];
	memset(atitle,0,nLen);
	//
	sprintf(atitle,"%d",n);
	//ltoa(n,atitle,nLen); //有问题
	return atitle;
}
//int转字符串函数
char* i2cp(int n)
{
	int nLen=sizeof(n);
	char* atitle=new char[nLen];
	sprintf(atitle,"%d",n);
	//itoa(n,atitle,nLen);
	return atitle;    
}
//double转字符串函数 
char* d2cp(double value)
{
	/*
   char *tt;    
   int dec, sign; 
   int ndig = 10; 
   tt = ecvt(value, ndig, &dec, &sign); 
   //tt = fcvt(value, ndig, &dec, &sign);
   return tt;*/
	char* s=new char[sizeof(value)];
	sprintf(s,"%8.6f",value); 
    char* ret_s=new char[strlen(s)];
	strcpy(ret_s,s);
	return ret_s;
}
//short转字符串函数 
char* short2cp(short value)
{
    char* s=new char[sizeof(value)];
	sprintf(s,"%d",value); 
    char* ret_s=new char[strlen(s)];
	strcpy(ret_s,s);
	return ret_s;
}
//合并
char* a2u(const char* A,const char* B)
{
    return strcat_lc(A,B);
}
char* a3u(const char* A,const char* B,const char* C)
{
	char* t=strcat_lc(A,B);
	t=strcat_lc(t,C);
    return t;
}
char* a4u(const char* A,const char* B,const char* C,const char* D)
{
	char* t=strcat_lc(A,B);
	t=strcat_lc(t,C);
	t=strcat_lc(t,D);
    return t;
}
char* a5u(const char* A,const char* B,const char* C,const char* D,const char* E)
{
	char* t=strcat_lc(A,B);
	t=strcat_lc(t,C);
	t=strcat_lc(t,D);
	t=strcat_lc(t,E);
    return t;
}
char* a6u(const char* A,const char* B,const char* C,const char* D,const char* E,const char* F)
{
	char* t=strcat_lc(A,B);
	t=strcat_lc(t,C);
	t=strcat_lc(t,D);
	t=strcat_lc(t,E);
	t=strcat_lc(t,F);
    return t;
}
char* a7u(const char* a1,const char* a2,const char* a3,const char* a4,const char* a5,const char* a6,const char* a7)
{
	char* t=strcat_lc(a1,a2);
	t=strcat_lc(t,a3);
	t=strcat_lc(t,a4);
	t=strcat_lc(t,a5);
	t=strcat_lc(t,a6);
	t=strcat_lc(t,a7);
    return t;
}
char* substr_lc(const char* cs,char* fd)
{
     return strstr(cs,fd);
}
char* getdir_lc(char* s,const char* d)
{	
	char* s_s=new char[strlen(s)];
	strcpy(s_s,s);
	char* s_rev=strrev(s_s);
	char* t_rev=strstr(s_rev,d);
	char* t=strrev(t_rev);
	return t;
}
char* getfilenameWithEx_lc(char* s,const char* d)
{	
    char* t_dir=getdir_lc(s,d);
	//
	char* s_s=new char[strlen(s)];
	strcpy(s_s,s);
	int dir_len=strlen(t_dir);
	int fn_len=strlen(s_s)-dir_len;
    char* fn_ext=new char[fn_len];
	memset(fn_ext,0,fn_len);
	//
	for(int i=0;i<fn_len;i++)
	{
		fn_ext[i]=s_s[dir_len+i];
	}
	char* ret_s=new char[strlen(fn_ext)];
	strcpy(ret_s,fn_ext);
	return ret_s;
}
//获取不带扩展名的文件名
char* getfilenameNoExt_lc(char* s,const char* d)
{     
	//获取带扩展名的文件名
	 char** strArray;
	 char* t_f_ext=NULL;
	 strArray=GetStrArray(s,"\\");
	 int t_len=atoi(strArray[0]);
	 t_f_ext=strArray[t_len];
    //获取不带扩展名的文件名
	 char* t_fname=NULL;	 			
	 strArray=GetStrArray(t_f_ext,".");
	 int arraylen=atoi(strArray[0]);
	 if(arraylen>=2)
	 {
	    t_fname=strArray[1];
	 }
	 return t_fname;
}
//分割字符并返回字符数组
char **GetStrArray(char* s,const char* d)
{		
    char* s_s=new char[strlen(s)];
	strcpy(s_s,s);
	//计算字符数组个数
	int rows=0;
    char *p_str=strtok(s_s,d);
	while(p_str) 
    { 	
		rows+=1;
        p_str=strtok(NULL,d); 
	} 
	//重新初始二维数据
	char **strArray=new char*[rows+1];
	for(int i=0;i<rows;i++)
	{
        strArray[i]=NULL;
	}	
	strArray[0]=i2cp(rows);  //数组总长度
	//
	int index=1;
	s_s=new char[strlen(s)];
	strcpy(s_s,s);
    p_str=strtok(s_s,d);
	while(p_str) 
    { 			
        char* s_p=new char[strlen(p_str)];
	    strcpy(s_p,p_str);
		//添加到二维数组中
        strArray[index]=s_p;
		//
		index+=1;
        p_str=strtok(NULL,d); 
	}	
	return strArray;
}
void ShowMsg(char* msg)
{    
	::MessageBox(NULL,msg,"提示",0);
	//_MapGisAbout(msg);
}
void TestGetDiskSpace()
{
    char* atitle=GetDiskSpace_lc(4);
	//char* atitle=AppTitle;
	ShowMsg(atitle);
	//MessageBox(hWnd,(LPCSTR)m,(LPCSTR)m,NULL);     
    //_DispAbout();
}
void D2A_test()
{	
	char* f_ext="cun_xzdw.wl";	
	char **strArray=GetStrArray(f_ext,".");
    int tlen=atoi(strArray[0]);
	ShowMsg(strArray[1]);
	return;
	//
	int rows=3;
	int cols=4;
	int i;
	//int j;
	int *p;
	char* pret;
	//静态声明二维数据
	/*
    int a[3][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24}};
    //赋值
	for(i=0;i<rows;i++)
	{
		for(j=0;j<cols;j++)
		{
			a[i][j]=i*4+j;		    
		}
	}
		//
	p=a[0];  //数组首地址
	//一般二维数据读取法
	pret="一般二维数据读取法\n";	
	for(i=0;i<rows;i++)
	{
         for(j=0;j<cols;j++)
		 {
			 char* ret=new char[50];
			 memset(ret,0,50);
             sprintf(ret,"%d,",a[i][j]);
			 if(strlen(pret)<=0)
			 {
                 pret=ret;
			 }
			 else
			 {
			     pret=a2u(pret,ret);
			 }
		 }
		 pret=a2u(pret,"\n");
	}
	//*(p+5)=pos(0,1,2,3,4,5)=12
	//sprintf(ret,"test 2 array=%d,%d",*(p+5),a[1][1]);	//12,12
	ShowMsg(pret); 	
	//输出结果
	//一般二维数据读取法
	//1,2,3,4
	//11,12,13,14
	//21,22,23,24
	*/
	//动态声明二维数据	
	int zlen=rows*cols;
	int **a=new int*[rows];
	for(i=0;i<rows;i++)
	{
		a[i]=new int[cols];
	}
	p=a[0];  //数组首地址
	//赋值
	for(i=0;i<zlen;i++)
	{
		*(p+i)=i;
	}	
	//指针读取二维数据方法
	pret="指针读取二维数据方法\n";
	for(i=0;i<zlen;i++)
	{
		char* ret=new char[50];
		memset(ret,0,50);
        sprintf(ret,"%d,",*(p+i));
		if(strlen(pret)<=0)
		{
            pret=ret;
		}
		else
		{
		    pret=a2u(pret,ret);
		}         
	}
	ShowMsg(pret);
	//输出结果
	//指针读取二维数据方法
	//1,2,3,4,11,12,13,14,21,22,23,24
	return;
	//-----------------------------------
	//查看属性
	_ViewAtt(MainWnd,AHInst,0);
	//查看mapgis图层字段结构api
	_ViewStruct(MainWnd,AHInst);

	char* s;
	double value;
	int dec,sign;
	int ndig=2;  //字符串长度
	value=35951234.876533324234;
    s=ecvt(value,ndig,&dec,&sign);	
	ShowMsg(a5u(s,",dec=",i2cp(dec),",sign=",i2cp(sign)));
	sprintf(s,"%8.6f",value);  //OK
	ShowMsg(s);

	//
	value=-123.45;
	ndig=15;
	s=ecvt(value,ndig,&dec,&sign);
	ShowMsg(a5u(s,",dec=",i2cp(dec),",sign=",i2cp(sign)));
	//
	value=0.6789e5;
	ndig=5;
	s=ecvt(value,ndig,&dec,&sign);
	ShowMsg(a5u(s,",dec=",i2cp(dec),",sign=",i2cp(sign)));
	return;
}

//获取图层类型 OK
char* GetGeoVctType(short ai)
{	
	short LayerType=_GetAreaType(ai);
	char* GeoVctType="UnKown";
	switch(LayerType)
	{
		case REG:
			GeoVctType="Polygon";
			break;
		case LIN:
			GeoVctType="Line";
			break;
		case PNT:
            GeoVctType="Point";
			break;
		default:
			break;
	}
	return GeoVctType;
}

--the--end---