有一段画地图的VC代码,不知如何移植到Delphi上,请高手帮忙翻译一下,分不够可在加//画地图轮廓线
void CRtradarView::DrawNewMap_Data(CDC *dc, int cen_x,int cen_y, int dis, int radius, char *name, COLORREF clr)
{
long TotalNum=0L,NodeNum=0L;
// char sTemp[32]; char filename[128];
sprintf(filename,"%s\\%s",Map_Dir, name);
FILE *fp=fopen(filename,"rb");
if(fp==NULL)
{
// sprintf(sTemp,"打开地图数据文件 %s 错!",filename);
// AfxMessageBox(sTemp);
return;
}
fread(&TotalNum, 1, sizeof(long), fp); CPen pen(PS_SOLID,1,clr);
CPen *pen_Old=dc->SelectObject(&pen);
CPoint ptSrc,ptDraw;
DPoint ptScaled;
BOOL bFindFirstDot=0; for(long i=0; i<TotalNum; i++)
{
fread(&NodeNum, 1, sizeof(long), fp);
bFindFirstDot=0;
for(long j=0; j<NodeNum; j++)
{
fread(&ptSrc, 1, sizeof(CPoint), fp);
ptScaled.x=(float)((ptSrc.x-500) / 64.-RadarPos.x);
ptScaled.y=(float)((ptSrc.y-500) / 64.-RadarPos.y);
long range=(long)sqrt( ptScaled.x*ptScaled.x+ptScaled.y*ptScaled.y);
if(range > dis) continue; //判断是否超出距离档范围 ptDraw.x=(long)(ptScaled.x*radius/dis+cen_x);
ptDraw.y=(long)(ptScaled.y*radius/dis+cen_y);
if(j==0)
{
dc->MoveTo(ptDraw.x, ptDraw.y);
bFindFirstDot=1;
}
else{
if(bFindFirstDot) dc->LineTo(ptDraw.x, ptDraw.y);
else {
dc->MoveTo(ptDraw.x, ptDraw.y);
bFindFirstDot=1;
}
}
}
}
dc->SelectObject(pen_Old);
fclose(fp);
}
void CRtradarView::DrawNewMap_Data(CDC *dc, int cen_x,int cen_y, int dis, int radius, char *name, COLORREF clr)
{
long TotalNum=0L,NodeNum=0L;
// char sTemp[32]; char filename[128];
sprintf(filename,"%s\\%s",Map_Dir, name);
FILE *fp=fopen(filename,"rb");
if(fp==NULL)
{
// sprintf(sTemp,"打开地图数据文件 %s 错!",filename);
// AfxMessageBox(sTemp);
return;
}
fread(&TotalNum, 1, sizeof(long), fp); CPen pen(PS_SOLID,1,clr);
CPen *pen_Old=dc->SelectObject(&pen);
CPoint ptSrc,ptDraw;
DPoint ptScaled;
BOOL bFindFirstDot=0; for(long i=0; i<TotalNum; i++)
{
fread(&NodeNum, 1, sizeof(long), fp);
bFindFirstDot=0;
for(long j=0; j<NodeNum; j++)
{
fread(&ptSrc, 1, sizeof(CPoint), fp);
ptScaled.x=(float)((ptSrc.x-500) / 64.-RadarPos.x);
ptScaled.y=(float)((ptSrc.y-500) / 64.-RadarPos.y);
long range=(long)sqrt( ptScaled.x*ptScaled.x+ptScaled.y*ptScaled.y);
if(range > dis) continue; //判断是否超出距离档范围 ptDraw.x=(long)(ptScaled.x*radius/dis+cen_x);
ptDraw.y=(long)(ptScaled.y*radius/dis+cen_y);
if(j==0)
{
dc->MoveTo(ptDraw.x, ptDraw.y);
bFindFirstDot=1;
}
else{
if(bFindFirstDot) dc->LineTo(ptDraw.x, ptDraw.y);
else {
dc->MoveTo(ptDraw.x, ptDraw.y);
bFindFirstDot=1;
}
}
}
}
dc->SelectObject(pen_Old);
fclose(fp);
}
解决方案 »
- 如何取得TWebBrowser ScrollBar 的位置﹖
- DLL呼出的界面不能焦点 请解决办法
- 谁有InstallShield 6.22中文安装包?
- 安装EhLib控件包是老是包File not found 'dbsumlst.dcu',为什么?怎么办?
- 急,请问delphi如何调用外部可执行的软件?
- 准备学delphi
- 本人急切寻找国内POS打印机生产厂商,销往国外。
- 在线等待!用SaveDialog存文件时,如何让对话框不显示出来?参与者都有分!!!!
- 更改密码问题!
- 关于WINDOWS版本的问题
- 安装控件时不小心删除了默认的路径,请帮忙.
- ■■■如何让自己的程序在IE启动时候自动运行、IE关闭后跟着关闭?■■■
还是自己动手做吧。