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---