📄 gn74w.c
字号:
SWP_NOMOVE
);
break;
case IDM_SAVEFILE:
if(SaveFile(hWnd,hFrameInstance))
{
if(recfp)
{
time(&t); // get current time
fprintf(recfp,"\n#Begin");
fprintf(recfp,"\n开始时间:%s",ctime(&t));
bSaveFile = TRUE;
}
}
case IDM_GETTIME:
GetTime(hWnd,hFrameInstance);
idTimer = SetTimer(hWnd,1,1000,NULL);
break;
case IDM_DISPLAY:
bGetAver = TRUE;
break;
case IDM_BEGINSAVE://数据存盘开始
if(SaveDataFile(hWnd,hFrameInstance))
{
if(datafp)
{
time(&t); // get current time
fprintf(datafp,"\n#Begin");
fprintf(datafp,"\n开始时间:%s",ctime(&t));
}
}
break;
case IDM_ENDSAVE://数据存盘结束
if(datafp)
{
time(&t); // get current time
fprintf(datafp,"\n#end");
fprintf(datafp,"\n结束时间:%s",ctime(&t));
fclose(datafp);
}
break;
case IDM_STOP:
if(recfp)
{
time(&t); // get current time
fprintf(recfp,"\n#end");
fprintf(recfp,"\n结束时间:%s",ctime(&t));
fprintf(recfp,"\n The average of Latitude is :%d Degree %6.4f Minute",iLatDegAve,dLatMinAve);
fprintf(recfp,"\n The average of Longitude is :%d Degree %6.4f Minute",iLonDegAve,dLonMinAve);
fprintf(recfp,"\n The average of Altitude is :%7.1f Meters",fHeightAve);
fclose(recfp);
bSaveFile = FALSE;
MessageBox(hWnd,"计算结束!","消息",MB_OK);
KillTimer(hWnd,idTimer);
}
bGetAver = FALSE;
break;
case IDM_WINDOW:
hChildWnd = CreateWindow(
"ChildWindow",
"卫星位置图示",
WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
GetSystemMetrics(SM_CXSCREEN)-280,//CW_USEDEFAULT,
16,//CW_USEDEFAULT,
280,//GetSystemMetrics(SM_CYSCREEN)/2,//CW_USEDEFAULT,
300,//GetSystemMetrics(SM_CYSCREEN)/2,//CW_USEDEFAULT,
hFrameWnd,
NULL,//"OUTPUTMAPMENU",
hFrameInstance,
NULL
);
ShowWindow(hChildWnd,SW_SHOW);
break;
case IDM_CLEAR: //清屏
InvalidateRect(hWnd,NULL,TRUE);
break;
case IDM_EXIT:
if(MessageBox(hWnd," 您 是 否 要 结 束 系 统 操 作 ?","退出系统",MB_OKCANCEL|MB_ICONINFORMATION)==IDCANCEL)
break;
DestroyWindow(hWnd);
break;
} break;
case WM_DESTROY:
KillTimer(hWnd,idTimer);
if(datafp)
{
time(&t); // get current time
fprintf(datafp,"\n#end");
fprintf(datafp,"\n结束时间:%s",ctime(&t));
fclose(datafp);
}
if(recfp)
fclose(recfp);
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
}
int InitCom(char * szComPort,char *szComMode)
//串口初始化
{
DCB dcb;
char str[128];
int ret;
if(nComID>=0)
{
FlushComm(nComID,0); /*empty output queue */
FlushComm(nComID,1); /*empty input queue */
ClearCommBreak(nComID);
ret=CloseComm(nComID);
}
nComID = OpenComm(szComPort,COMBUFFERSIZE,COMBUFFERSIZE);
if(nComID < 0 )
{
sprintf(str,"%s 正在被其它设备占用!",szComPort);
MessageBox(hFrameWnd,str,"消 息",MB_OK);
return -1;
}else{
FlushComm(nComID,0); /*empty output queue */
FlushComm(nComID,1); /*empty input queue */
BuildCommDCB(szComMode,&dcb);
SetCommState(&dcb);
EscapeCommFunction(nComID,RESETDEV);
}
return 0;
}
void SendCommand(char *str)
{
int nStatus;
if(nComID>=0){
nStatus=WriteComm(nComID,str,strlen(str));
if(nStatus<0)
MessageBox(hFrameWnd,"Output comm error","Message",MB_OK);
}
}
BOOL GetInterval()
{
FARPROC lpDlg;
BOOL DlgRet;
lpDlg=MakeProcInstance(GetIntervalDlgProc,hFrameInstance);
DlgRet = DialogBox(hFrameInstance,"INPUTTIME",hFrameWnd,lpDlg);
FreeProcInstance(lpDlg);
return DlgRet;
}
BOOL FAR PASCAL GetIntervalDlgProc(HWND hDlg,unsigned message,WORD wParam,LONG lParam)
{
switch (message)
{
case WM_INITDIALOG:
SetFocus(GetDlgItem(hDlg,IDC_INTERVAL));
return FALSE;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
iInterval = GetDlgItemInt(hDlg,IDC_INTERVAL,NULL,0);
if(iInterval>60||iInterval<0){
MessageBox(hDlg,"输入数据非法!","Message",MB_OK);
EndDialog(hDlg, FALSE);
return FALSE;
}
EndDialog(hDlg, TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hDlg, FALSE);
return FALSE;
}break;
} //switch message
return FALSE;
}
BOOL FAR PASCAL AboutDlgProc(HWND hDlg,unsigned message,WORD wParam,LONG lParam)
{
switch (message)
{
case WM_COMMAND:
switch (wParam)
{
case IDOK:
EndDialog(hDlg, TRUE);
return TRUE;
}break;
} //switch message
return FALSE;
}
void SetupCommID()
{
FARPROC lpDlg;
BOOL DlgRet;
lpDlg=MakeProcInstance(SetupCommIDDlgProc,hFrameInstance);
DlgRet = DialogBox(hFrameInstance,"SETUPDLG",hFrameWnd,lpDlg);
FreeProcInstance(lpDlg);
}
BOOL FAR PASCAL SetupCommIDDlgProc(HWND hDlg,unsigned message,WORD wParam,LONG lParam)
{
char szBuf[256],szStr[256] ;
int iCommID, wPosition ;
switch (message)
{
case WM_INITDIALOG:
for (iCommID =1 ;iCommID<=10;iCommID++)
{
LoadString(hFrameInstance,iCommID,szStr,sizeof(szStr));
wPosition = SendMessage( GetDlgItem( hDlg, IDD_COMID), CB_ADDSTRING, 0,
(LPARAM)(LPSTR)szStr ) ;
SendDlgItemMessage( hDlg, IDD_COMID, CB_SETITEMDATA,
(WPARAM)wPosition , (LPARAM) iCommID );
}
SendMessage( GetDlgItem( hDlg, IDD_COMID), CB_SETCURSEL, (WPARAM) 0, NULL ) ;
// SetFocus(GetDlgItem(hDlg,IDC_COMID));
return FALSE;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
memset(szStr,0,sizeof(szStr));
memset(szBuf,0,sizeof(szStr));
GetDlgItemText(hDlg,IDD_COMID,szStr,5);
strcpy(szBuf,szStr);
strcat(szStr,":4800,N,8,1");
InitCom(szBuf,szStr);
EndDialog(hDlg, TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hDlg, FALSE);
return FALSE;
}break;
} //switch message
return FALSE;
}
BOOL GetOutputCommmand()
{
FARPROC lpDlg;
BOOL DlgRet;
int iCheckNum;
char szChkNum[4],szOCMD[64];
lpDlg=MakeProcInstance(GetOutputCommandDlgProc,hFrameInstance);
DlgRet = DialogBox(hFrameInstance,"OUTPUTCOMMAND",hFrameWnd,lpDlg);
FreeProcInstance(lpDlg);
if(DlgRet){
if(*szOutput!= '$')
{
MessageBox(hFrameWnd,"数据错误","消息",MB_OK|MB_ICONINFORMATION);
return FALSE;
}
iCheckNum = GetCheckNum(szOutput);
sprintf(szChkNum,"%02x",iCheckNum);
sprintf(szOCMD,"%s*%s\r\n",szOutput,_strupr(_strdup(szChkNum)));
SendCommand(szOCMD);
}
return DlgRet;
}
BOOL FAR PASCAL GetOutputCommandDlgProc(HWND hDlg,unsigned message,WORD wParam,LONG lParam)
{
// char szOutput1[128];
switch (message)
{
case WM_INITDIALOG:
SetFocus(GetDlgItem(hDlg,IDC_OUTPUT));
return FALSE;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
GetDlgItemText(hDlg,IDC_OUTPUT,szOutput,128);
EndDialog(hDlg, TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hDlg, FALSE);
return FALSE;
}break;
} //switch message
return FALSE;
}
void RecieveData()
{
int nReadChars,j,i;
COMSTAT ComStat;
static char cBuf[COMBUFFERSIZE/2];
if(nComID >= 0 )
{
if((nReadChars = ReadComm(nComID,cBuf,COMBUFFERSIZE/2))>0 )
{
AddQueue(cBuf,nReadChars);
}else{
GetCommError(nComID,&ComStat);
return ;
}
}
for(i=0;i<4;i++)
{
if(!GetComLine(szCom))
{
return ;
};
if((j=strlen(szCom))>=10&&j<=100)
{
if( hMessWnd!=NULL)
SendMessage(hMessWnd,(UINT)WM_USER,(WPARAM)0,(LPARAM)szCom);
AnalyseData(szCom);
}
}
}
BOOL GetComLine(char far *szCom)
{
register int i;
char cTmp;
if(!FindMessLine())
{
*szCom=0;
return FALSE;
}
for(i=0;i<128;i++)
{
cTmp=DeleteOne();
*szCom++=cTmp;
if(cTmp=='\r' || cTmp=='\n' || cTmp==0)
{
*(szCom-1)='\r';
*szCom=0;
cTmp=DeleteOne(); /* delete \n */
if(!(cTmp=='\r' || cTmp=='\n'))
AddOne(cTmp);
return TRUE;
}
}
*(szCom-1)='\r';
return TRUE;
}
void AddQueue(char *cBuf,int cn)
{
register int i;
for(i=0;i<cn;i++)
AddOne(*cBuf++);
}
void AddOne(char ch)
{
register int cp;
if(iComBuffTail+1==COMBUFFERSIZE) // reach the end of buffer array
cp=0;
else
cp=iComBuffTail+1;
if(cp==iComBuffHead) // buffer full
DeleteOne(); // delete an element from queue
aComBuffer[iComBuffTail]=ch;
iComBuffTail=cp;
}
char DeleteOne()
{
register int cp;
char cTmp;
if(iComBuffHead==iComBuffTail) // buffer empty
return 0;
if(iComBuffHead+1==COMBUFFERSIZE)
cp=0;
else
cp=iComBuffHead+1;
cTmp=aComBuffer[iComBuffHead];
iComBuffHead = cp;
return cTmp;
}
BOOL FindMessLine(void)
//search \r \n
{
register int cp;
if(iComBuffHead==iComBuffTail) // buffer empty
return FALSE;
cp=iComBuffHead;
while(aComBuffer[cp]!='\r' && aComBuffer[cp]!='\n')
{
if(cp+1==COMBUFFERSIZE)
cp=0;
else
cp++;
if(cp==iComBuffTail) // all data have been read
return FALSE;
}
return TRUE;
}
BOOL AnalyseData(char * pp)
{
enum GMessOrd eGmess;
char strbuf[200],szData[64];
int i,Num,j,ilen;
char Mode[7];
static char Status[2],SateNo[4];
static unsigned long ulLon,ulLat,ulLatDegSum,ulLonDegSum;
int Series,SatellitesNo;
char str[64];
HDC hDC;
char sss[] = "没有定位!";
long dwLon1,dwLat1;
memset(strbuf,0,strlen(strbuf));
for(i=0,Num=0;i<(int)strlen(pp);i++)
{
if((pp[i]!=',')&&(pp[i]!='.')&&(pp[i]!='N')&&(pp[i]!='E')&&(pp[i]!='M'))
{
strbuf[Num]=pp[i];
Num++;
}
}
while(*pp && *pp!= '$') pp++;
pp++;
for(eGmess=0;eGmess<GPEND;eGmess++)
if(strncmp(pp,GMess[eGmess],5)==0) break;
if(eGmess==GPEND) return FALSE;
switch(eGmess)
{
case GPGGA:
if(!strncmp(strbuf,"$GPGGA",5)==0)
return FALSE;
ilen=strlen(strbuf);
if (ilen <= 48){
j=sscanf(strbuf,"%6c%8ld%9ld%c%2c%4c%7ld",&Mode,&dwLat,
&dwLon,&Status,&SateNo,&DOP,&Height);
// if(hFrameWnd)
// InvalidateRect(hFrameWnd,NULL,TRUE);
hDC=GetDC(hFrameWnd);
TextOut(hDC,60,142,sss,strlen(sss)); //620,142
ReleaseDC(hFrameWnd,hDC);
}else
j=sscanf(strbuf,"%6c%6ld%8ld%9ld%c%2c%4c%7ld",&Mode,&tmptime,&dwLat,
&dwLon,&Status,&SateNo,&DOP,&Height);
// if(j!=8)
// return FALSE;
iStatus = atoi(Status);
//iSateNo = atoi(SateNo);
iDop = atoi(DOP);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -