📄 gn74w.c
字号:
ulLat = dwLat;
ulLon = dwLon;
iLatDeg = (int)(ulLat/1000000);
dLatMin = (double)(ulLat-iLatDeg*1000000)/10000;
iLonDeg = (int)(ulLon/1000000);
dLonMin = (double)(ulLon-iLonDeg*1000000)/10000;
if(datafp){
dwLat1 = (long)(dwLat/10);
dwLon1 = (long)(dwLon/10);
memset(szData,0,64);
sprintf(szData,"$GGA%04d%06ld%7ld%8ld%1d%02d%04d%04d\r\n",1,tmptime,dwLat1,dwLon1,1,1,1,Height);
fprintf(datafp,"%s",szData);
}
if(bSaveFile && iStatus)
{
sprintf(str,"%8ld,%9ld,%d",dwLat,dwLon,Height);
if(recfp)
fprintf(recfp,"\n%s",str);
}
if(bGetAver && iStatus){
fHeight = (float)(Height/10);
ulLatDegSum += iLatDeg;
dLatMinSum += dLatMin;
ulLonDegSum += iLonDeg;
dLonMinSum += dLonMin;
fHeightSum += fHeight;
iDataNum++;
iLatDegAve = (int)(ulLatDegSum/iDataNum);
dLatMinAve = dLatMinSum/iDataNum;
iLonDegAve = (int)(ulLonDegSum/iDataNum);
dLonMinAve = dLonMinSum/iDataNum;
fHeightAve = fHeightSum/iDataNum;
}
SendMessage(hFrameWnd,(UINT)WM_USER,(WPARAM)0,(LPARAM)0);
break;
case GPGSV:
if(!strncmp(strbuf,"$GPGSV",5)==0)
return FALSE;
j=sscanf(strbuf,"%6c%1d%1d%2d", &Mode,&MessNo,&iiSeries ,&SatellitesNo);
if(iiSeries >3 )
return FALSE;
if((strlen(strbuf) >=10 ) && iiSeries == 1)
{
j=sscanf(strbuf,"%6c%1d%1d%2d%2d%2d%3d%2d%2d%2d%3d%2d%2d%2d%3d%2d%2d%2d%3d%2d",
&Mode,&MessNo,&Series,&SatellitesNo
,&Satellites[0].SV,&Satellites[0].ElevateAngle
,&Satellites[0].BearingAngle,&Satellites[0].SNR
,&Satellites[1].SV,&Satellites[1].ElevateAngle
,&Satellites[1].BearingAngle,&Satellites[1].SNR
,&Satellites[2].SV,&Satellites[2].ElevateAngle
,&Satellites[2].BearingAngle,&Satellites[2].SNR
,&Satellites[3].SV,&Satellites[3].ElevateAngle
,&Satellites[3].BearingAngle,&Satellites[3].SNR);
iiSeries = Series;
iSateNo = SatellitesNo;
}else
if((strlen(strbuf) ) && iiSeries != 1 && iiSeries != 3)
{
j=sscanf(strbuf,"%6c%1d%1d%2d%2d%2d%3d%2d%2d%2d%3d%2d%2d%2d%3d%2d%2d%2d%3d%2d",
&Mode,&MessNo,&Series,&SatellitesNo
,&Satellites[4].SV,&Satellites[4].ElevateAngle
,&Satellites[4].BearingAngle,&Satellites[4].SNR
,&Satellites[5].SV,&Satellites[5].ElevateAngle
,&Satellites[5].BearingAngle,&Satellites[5].SNR
,&Satellites[6].SV,&Satellites[6].ElevateAngle
,&Satellites[6].BearingAngle,&Satellites[6].SNR
,&Satellites[7].SV,&Satellites[7].ElevateAngle
,&Satellites[7].BearingAngle,&Satellites[7].SNR);
iiSeries = Series;
iSateNo = SatellitesNo;
}else
{
j=sscanf(strbuf,"%6c%1d%1d%2d%2d%2d%3d%2d%2d%2d%3d%2d%2d%2d%3d%2d%2d%2d%3d%2d",
&Mode,&MessNo,&Series,&SatellitesNo
,&Satellites[8].SV,&Satellites[8].ElevateAngle
,&Satellites[8].BearingAngle,&Satellites[8].SNR
,&Satellites[9].SV,&Satellites[9].ElevateAngle
,&Satellites[9].BearingAngle,&Satellites[9].SNR
,&Satellites[10].SV,&Satellites[10].ElevateAngle
,&Satellites[10].BearingAngle,&Satellites[10].SNR
,&Satellites[11].SV,&Satellites[11].ElevateAngle
,&Satellites[11].BearingAngle,&Satellites[11].SNR);
iiSeries = Series;
iSateNo = SatellitesNo;
}
if(hChildWnd)
InvalidateRect(hChildWnd,NULL,TRUE);
break;
case GPGLL:
break;
case GPZDA:
break;
case GPGSA:
break;
case GPRMC:
break;
case GPVTG:
break;
}
}
long FAR PASCAL MessWndProc(hWnd, message, wParam, lParam)
HWND hWnd;
unsigned message;
UINT wParam;
LONG lParam;
{
static HWND hListBox=NULL;
static int WindowHeight,WindowWidth;
static int MessageNum;
switch (message)
{
case WM_USER:
if(!hListBox)
break;
if(MessageNum>=15)
{
SendMessage(hListBox,LB_DELETESTRING,0,0); // delete the first item
MessageNum--;
}
SendMessage(hListBox,LB_ADDSTRING,0,lParam);
MessageNum++;
break;
case WM_SIZE:
{
RECT rectClient;
GetClientRect(hWnd,&rectClient);
WindowHeight=rectClient.bottom-rectClient.top;
WindowWidth =rectClient.right-rectClient.left;
if(hListBox)
DestroyWindow(hListBox);
MessageNum=0;
hListBox=CreateWindow("LISTBOX","数据信息",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | LBS_HASSTRINGS,
0,0,WindowWidth,WindowHeight,hWnd,NULL,hFrameInstance,NULL);
ShowWindow(hListBox,SW_SHOW);
MoveWindow(hMessWnd,
0,
310,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN)-310,
TRUE);
break;
}
case WM_DESTROY:
hMessWnd=0;
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return (NULL);
}
long FAR PASCAL ChildWndProc(hWnd, message, wParam, lParam)
HWND hWnd;
unsigned message;
WORD wParam;
LONG lParam;
{
HDC hDC;
HPEN hPen1,hPen2,hPen3;
PAINTSTRUCT PtStr;
POINT Point;
int i;
char Temp[24];
switch (message)
{
case WM_SIZE:
MoveWindow(hWnd,
GetSystemMetrics(SM_CXSCREEN)-290,
17,
290,
294,
TRUE);
break;
case WM_PAINT:
hDC = BeginPaint(hWnd,&PtStr);
SetMapMode(hDC,MM_ANISOTROPIC);
SetTextColor(hDC,RGB(0,0,255));
hPen1 = CreatePen(PS_SOLID,1,RGB(159,85,107));
SelectObject(hDC,hPen1);
Ellipse(hDC,50,50,230,230);
hPen2 = CreatePen(PS_DASHDOT,1,RGB(159,85,107));
SelectObject(hDC,hPen2);
Ellipse(hDC,80,80,200,200);
hPen3 = CreatePen(PS_DASHDOTDOT,1,RGB(159,85,107));
SelectObject(hDC,hPen3);
Ellipse(hDC,110,110,170,170);
sprintf(Temp,"%s","真北");
TextOut(hDC,125,25,Temp,strlen(Temp));
SelectObject(hDC,hPen1);
MoveTo(hDC,30,140);
LineTo(hDC,250,140);
SelectObject(hDC,hPen1);
MoveTo(hDC,140,30);
LineTo(hDC,140,250);
SelectObject(hDC,hPen1);
for(i = 0;i<iSateNo;i++)
{
Point = CoordinateTransform(Satellites[i].BearingAngle,Satellites[i].ElevateAngle);
sprintf(Temp,"%02d",Satellites[i].SV);
TextOut(hDC,Point.x,Point.y,Temp,strlen(Temp));
}
EndPaint(hWnd,&PtStr);
DeleteObject(hPen1);
DeleteObject(hPen2);
DeleteObject(hPen3);
break;
case WM_DESTROY:
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return (NULL);
}
POINT CoordinateTransform(int Bearing,int ElevateAngle)
{
POINT Point;
if( Bearing >=0 &&Bearing<90)
{
Point.x = 140 + (int)((90-ElevateAngle) * sin((PI*Bearing)/180));
Point.y = 140 - (int)((90-ElevateAngle) * cos((PI*Bearing)/180));
}
if( Bearing >=90 &&Bearing<180)
{
Point.y = 140 + (int)((90-ElevateAngle) * sin(PI*(Bearing-90)/180));
Point.x = 140 - (int)((90-ElevateAngle) * cos(PI*(Bearing-90)/180));
}
if( Bearing >=180 &&Bearing<270)
{
Point.x = 140 - (int)((90-ElevateAngle) * sin(PI*(Bearing-180)/180));
Point.y = 140 + (int)((90-ElevateAngle) * cos(PI*(Bearing-180)/180));
}
if( Bearing >=270 &&Bearing<360)
{
Point.y = 140 - (int)((90-ElevateAngle) * sin(PI*(Bearing-270)/180));
Point.x = 140 - (int)((90-ElevateAngle) * cos(PI*(Bearing-270)/180));
}
return Point;
}
void GetTime(HWND hWnd,HANDLE hInstance)
{
FARPROC lpDlg;
int DlgRet;
lpDlg = MakeProcInstance((FARPROC)GetTimeDlgProc,hInstance);
DlgRet = DialogBox(hInstance,"GETTIMEDLG",hWnd,lpDlg);
FreeProcInstance(lpDlg);
}
BOOL FAR PASCAL GetTimeDlgProc(HWND hDlg,unsigned message,
WORD wParam,LONG lParam)
{
static int WorkMode ;
switch (message)
{
case WM_INITDIALOG:
CheckRadioButton(hDlg, IDC_HOUR, IDC_SECOND,IDC_SECOND);
SetDlgItemText(hDlg,IDC_MODE,"秒");
SetFocus(GetDlgItem(hDlg,IDC_TIME));
WorkMode = 3;
break;
case WM_COMMAND:
switch (wParam)
{
case IDC_HOUR:
CheckRadioButton(hDlg, IDC_HOUR, IDC_SECOND,IDC_HOUR);
SetDlgItemText(hDlg,IDC_MODE,"小时");
WorkMode = 1;
break;
case IDC_MINUTE:
CheckRadioButton(hDlg, IDC_HOUR, IDC_SECOND,IDC_MINUTE);
SetDlgItemText(hDlg,IDC_MODE,"分钟");
WorkMode = 2;
break;
case IDC_SECOND:
CheckRadioButton(hDlg, IDC_HOUR, IDC_SECOND,IDC_SECOND);
SetDlgItemText(hDlg,IDC_MODE,"秒");
WorkMode = 3;
break;
case IDOK:
switch(WorkMode)
{
case 1:
iTime =(unsigned long)3600 * GetDlgItemInt(hDlg,IDC_TIME,NULL,0);
break;
case 2:
iTime =(unsigned long)60 * GetDlgItemInt(hDlg,IDC_TIME,NULL,0);
break;
case 3:
iTime = (unsigned long)GetDlgItemInt(hDlg,IDC_TIME,NULL,0);
break;
}
if(iTime)
bCount = TRUE;
bGetAver = TRUE;
EndDialog(hDlg, TRUE);
return (TRUE);
case IDCANCEL:
if(recfp){
fclose(recfp);
remove(cFName);
}
EndDialog(hDlg, FALSE);
return (FALSE);
}//swith wParam
break;
} //switch message
return FALSE;
}
int SaveFile(HWND hWnd,HANDLE hInstance)
{
FARPROC lpDlg;
int DlgRet;
lpDlg = MakeProcInstance((FARPROC)SaveFileDlgProc,hInstance);
DlgRet = DialogBox(hInstance,"SAVEFILE",hWnd,lpDlg);
FreeProcInstance(lpDlg);
return DlgRet;
}
BOOL FAR PASCAL SaveFileDlgProc(HWND hDlg,unsigned message, WORD wParam,LONG lParam)
{
switch (message)
{
case WM_INITDIALOG:
SetFocus(GetDlgItem(hDlg,IDC_FILENAME));
break;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
memset(cFName,0,128);
GetDlgItemText(hDlg,IDC_FILENAME, cFName, 128);
if((recfp=fopen(cFName,"at"))==NULL)
{
MessageBox(hDlg,"Invalid file ","Message",MB_OK);
return FALSE;
}
EndDialog(hDlg, TRUE);
return (TRUE);
case IDCANCEL:
EndDialog(hDlg, FALSE);
return (FALSE);
}//swith wParam
break;
} //switch message
return FALSE;
}
BOOL FAR PASCAL _export DialogWndProc(HWND hDlg, UINT message, UINT wParam, LONG lParam)
{
static FILE *fp;
char szfpName[12],szPoint[64],str[32];
switch (message)
{
case WM_INITDIALOG:
SetFocus(GetDlgItem(hDlg,IDC_FILE1));
break;
case WM_COMMAND:
switch (wParam)
{
case IDD_SAMPLE:
if(!fp){
GetDlgItemText(hDlg,IDC_FILE1, szfpName, 128);
if((fp=fopen(szfpName,"at"))==NULL)
{
MessageBox(hDlg,"Invalid file ","Message",MB_OK);
return FALSE;
}
}
if(fp){
GetDlgItemText(hDlg,IDC_RECPOINT, szPoint, 128);
sprintf(str,"%s",szPoint);
fprintf(fp,"%s\t",str);
sprintf(str,"%8ld,%9ld",dwLat,dwLon);
fprintf(fp,"%s\n",str);
}
break;
case IDD_SAVE:
if(fp)
fclose(fp);
break;
case IDOK:
if(fp)
fclose(fp);
EndDialog(hDlg, TRUE);
return (TRUE);
}//swith wParam
break;
} //switch message
return FALSE;
}
int SaveDataFile(HWND hWnd,HANDLE hInstance)
{
FARPROC lpDlg;
int DlgRet;
lpDlg = MakeProcInstance((FARPROC)SaveDataFileDlgProc,hInstance);
DlgRet = DialogBox(hInstance,"SAVEFILE",hWnd,lpDlg);
FreeProcInstance(lpDlg);
return DlgRet;
}
BOOL FAR PASCAL SaveDataFileDlgProc(HWND hDlg,unsigned message, WORD wParam,LONG lParam)
{
char DataFile[128];
switch (message)
{
case WM_INITDIALOG:
SetFocus(GetDlgItem(hDlg,IDC_FILENAME));
break;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
memset(DataFile,0,128);
GetDlgItemText(hDlg,IDC_FILENAME, DataFile, 128);
if((datafp=fopen(DataFile,"at"))==NULL)
{
MessageBox(hDlg,"Invalid file ","Message",MB_OK);
return FALSE;
}
EndDialog(hDlg, TRUE);
return (TRUE);
case IDCANCEL:
EndDialog(hDlg, FALSE);
return (FALSE);
}//swith wParam
break;
} //switch message
return FALSE;
}
int GetCheckNum(char *szCMD)
{
int szlen ,i;
static int iChkNum;
szlen = strlen(szCMD);
iChkNum = szCMD[1]^szCMD[2] ;
for(i=3;i<szlen;i++)
{
iChkNum = iChkNum ^szCMD[i];
}
return iChkNum;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -