⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 childwnd.c

📁 用C写的GPS测试软件
💻 C
字号:
#include "windows.h"
#include "stdlib.h"
#include "string.h"
#include "ilwis.h"
#include "gisgps.h"
#include "time.h"
#include <commdlg.h>
//#define IDB_CAR     112    
#define  YEAR      (datetime->tm_year % 100)
#define  MONTH     (datetime->tm_mon + 1)
#define  MDAY      (datetime->tm_mday)
#define  WDAY      (datetime->tm_wday)

extern struct tagDisplayMode DispMode[15];
struct ChildWnd child; //global child table
int nObjectMenuItem;
int curid;
extern HANDLE hInst;
extern  HCURSOR hCrossCursor,hArrowCursor,hWaitCursor;
extern void AObjectMoveTo(HDC,WORD,int,int,int,int);
extern HBRUSH hOldBrush,hBlueBrush;
extern char str[255];
extern int SingleID;
extern UINT aID[MAXUNIT+1];
extern int ObjectID[MAXUNIT+1];
BOOL FAR PASCAL TraceManageDlg1(HWND hDlg,unsigned message,
	WORD wParam,LONG lParam);

long FAR PASCAL ChildWndProc(hWnd, message, wParam, lParam)
HWND hWnd;
unsigned message;
WORD wParam;
LONG lParam;
{
	HDC hDC;                          /* display-context variable  */
	PAINTSTRUCT ps;                   /* paint structure           */
	int     d1,d2,d3;
	float d;
    float ftmp; 
    char  ctmp;
    DWORD dwtmp;
	WORD wIndex;
	static char szWday[] = "星期日\0 星期一\0 星期二\0 星期三\0 星期四\0 星期五\0 星期六"; 
    static char cName [] ="intl";
	time_t  lTime;    
    int iDate;
	char   sDate[2],cBuffer[100];
    struct tm *datetime;
	
	wIndex=(WORD)GetWindowWord(hWnd,0);
								
	switch (message) 
	{
		case WM_SIZE:                   // WINDOW size changed
		{

			GetClientRect(hWnd,&child.Info[wIndex].rectClient);
			child.Info[wIndex].WindowHeight=child.Info[wIndex].rectClient.bottom-child.Info[wIndex].rectClient.top-1;
			child.Info[wIndex].WindowWidth =child.Info[wIndex].rectClient.right-child.Info[wIndex].rectClient.left-1;
			//child.Info[wIndex].InitFlag=FALSE;             // recalculate zoom fact
        	//child.Info[wIndex].FactChanged=TRUE;
		
		}
		break;
	    case WM_USER:
			
			hDC=GetDC(hWnd);
			if(child.Info[wIndex].PosFlag==0)
			{
				sprintf(str,"%s","经纬度:");
				TextOut(hDC,10,10,str,strlen(str));
				sprintf(str,"东经:");
				TextOut(hDC,10,28,str,strlen(str));
				sprintf(str,"北纬:");
				TextOut(hDC,10,44,str,strlen(str));
				sprintf(str,"速度:");
				TextOut(hDC,10,60,str,strlen(str));
				sprintf(str,"方向:");
				TextOut(hDC,10,80,str,strlen(str));
				sprintf(str,"车辆状态: ");
				TextOut(hDC,10,100,str,strlen(str));
				sprintf(str,"时间:");
				TextOut(hDC,10,120,str,strlen(str));
				sprintf(str,"日期:");
				TextOut(hDC,10,140,str,strlen(str));
				child.Info[wIndex].PosFlag=1;
			};

			SetTextColor(hDC,RGB(255,0,0));
			d=CurPosX;
			d1=(int)d;   d=(float)(d-d1)*60;
			d2=(int)d;   d=(float)(d-d2)*60;
			d3=(int)d;

			sprintf(str,"%4d  度",d1);
			TextOut(hDC,11+8*4,28,str,strlen(str));
			sprintf(str,"%4d  分",d2);
			TextOut(hDC,11+8*10,28,str,strlen(str));
			sprintf(str,"%3d  秒",d3);
			TextOut(hDC,11+8*16,28,str,strlen(str));

        	d=CurPosY;
			d1=(int)d;   d=(float)(d-d1)*60;
			d2=(int)d;   d=(float)(d-d2)*60;
			d3=(int)d;
			sprintf(str,"%4d  度",d1);
			TextOut(hDC,11+8*4,44,str,strlen(str));
			sprintf(str,"%4d  分",d2);
			TextOut(hDC,11+8*10,44,str,strlen(str));
			sprintf(str,"%3d  秒",d3);
			TextOut(hDC,11+8*16,44,str,strlen(str));
		 
		 
			ftmp=(float)((((struct TransMessInfo *)lParam)->Volecity)*1.852/10);
			sprintf(str,"%03.f 公里/小时",ftmp);
			TextOut(hDC,45,60,str,strlen(str));
			sprintf(str,"%03d 度",((struct TransMessInfo *)lParam)->Direction/10);
			TextOut(hDC,49,80,str,strlen(str));
			ctmp=((struct TransMessInfo *)lParam)->RunOrStop;
			if(ctmp=='7')
			{
				sprintf(str,"正常运行中");
			 	TextOut(hDC,88,100,str,strlen(str));
			};
			if(ctmp=='6')
			{
				sprintf(str,"处于报警中");
			 	TextOut(hDC,88,100,str,strlen(str));
			};
			if(ctmp=='0')
			{
				sprintf(str,"非正常中止");
			 	TextOut(hDC,88,100,str,strlen(str));
			};                
			dwtmp=((struct TransMessInfo *)lParam)->Time;
			 
			sprintf(str,"%02ld :",dwtmp/10000L);     
			TextOut(hDC,49,120,str,strlen(str));
			dwtmp%=10000L;
			sprintf(str,"%02ld :",dwtmp/100L);       
			TextOut(hDC,71,120,str,strlen(str));
			dwtmp%=100L;
			sprintf(str,"%02ld",dwtmp);    
			TextOut(hDC,98,120,str,strlen(str));
			 
		    SetTextColor(hDC,RGB(0,0,0));
		    ReleaseDC(hWnd,hDC);
		     
			break;
    	case WM_CREATE:
	 	{
			int i=0;
			char  lpTmp[18];
			HMENU hmenu;               
			wIndex=child.num;
	
			child.Info[wIndex].FactChanged=FALSE;
			child.Info[wIndex].InitFlag=FALSE;
			child.Info[wIndex].IsFirstMess=TRUE;
			child.Info[wIndex].Status=1;//0:map 1:lon
			child.Info[wIndex].bTrack=FALSE;
			child.Info[wIndex].TracingObjectID=0;
			//End init 
			hmenu = GetSubMenu(GetMenu(hWnd),2);  
			for(i=0;i<AOT.aotn;i++)//while(ObjectID[i]!=-1)
		 	{                       
				wsprintf(lpTmp,"%05d",AOT.id[i]);
				AppendMenu(hmenu, MF_ENABLED|MF_STRING,AOT.id[i], lpTmp);
		 	}                                           
			nObjectMenuItem=AOT.aotn;               
			wsprintf(lpTmp,"Monitor%d跟踪-%05d",wIndex,AOT.id[child.Info[wIndex].TracingObjectID]);
			SetWindowText(hWnd, lpTmp);                                
			CheckMenuItem(hmenu,AOT.id[child.Info[wIndex].TracingObjectID],MF_CHECKED);
		}
		break;  
		case WM_CHANGEMENU:
	    { 
	    	HMENU hmenu;
	     	int i,j; 
	     	char lpTmp[12];
	     	BOOL bRet;
	     
	     	for(j=1;j<=(int)child.num;j++)
	     	{
	     		hmenu = GetSubMenu(GetMenu(child.Info[j].hWnd),2);      
	     		for(i=nObjectMenuItem;i>=0;i--)//Remove old menu items
				{       
					bRet=RemoveMenu(hmenu,i,MF_BYPOSITION);
				}
				 	
	    		for(i=0;i<AOT.aotn;i++)//Add New menu item,
				{                       
					wsprintf(lpTmp,"%05d",AOT.id[i]);
					AppendMenu(hmenu, MF_ENABLED|MF_STRING,AOT.id[i], lpTmp);
		 		};
		 		wsprintf(lpTmp,"Monitor%d跟踪-%05d",j,AOT.id[child.Info[j].TracingObjectID]);
		 		SetWindowText(child.Info[j].hWnd, lpTmp);	
		 		CheckMenuItem(hmenu,AOT.id[child.Info[j].TracingObjectID],MF_CHECKED);	                   
	     
	     		DrawMenuBar(child.Info[j].hWnd); 	  
	    	}; 
	    	nObjectMenuItem=AOT.aotn;  
	  	};
		break;	
		case WM_COMMAND:
			switch(wParam)
			{  
				case IDM_POS:
					child.Info[wIndex].Status=1;
					InvalidateRect (hWnd, NULL, TRUE);
					UpdateWindow (hWnd);
					break;
				case IDM_SELOBJ:
				{	
					FARPROC lpDlg;
					int DlgRet,i;
					char lpTmp[18];
			
					lpDlg=MakeProcInstance(TraceManageDlg1,hInst);
					DlgRet=DialogBox(hInst,"TraceDialog1",hWnd,lpDlg);
					FreeProcInstance(lpDlg);
					if(!DlgRet) break;      
			 
				  //NEW OBJECT       
		   			if(AOT.id[child.Info[wIndex].TracingObjectID]!=(int)curid)
		   				child.Info[wIndex].IsFirstMess=TRUE;
		
				   	for(i=0;i<AOT.aotn;i++)
					{ 
						if(AOT.id[i]==(int)curid)
			  			{                                           
							child.Info[wIndex].TracingObjectID=i;
							wsprintf(lpTmp,"Monitor%d跟踪-%05d",wIndex,AOT.id[child.Info[wIndex].TracingObjectID]);
							SetWindowText(hWnd, lpTmp);
	    					InvalidateRect (hWnd, NULL, TRUE);
							UpdateWindow (hWnd);
							break;                       
			  			};
			
	   				}//for end
		 			break;        
				}    
				default:
				{
					int i=0;
			  		HMENU hmenu;
			  		char lpTmp[18];
		      		hmenu=GetMenu(hWnd);
		   		//NEW OBJECT       
		   			if(AOT.id[child.Info[wIndex].TracingObjectID]!=(int)wParam)
		   				child.Info[wIndex].IsFirstMess=TRUE;
		
			   		for(i=0;i<AOT.aotn;i++)
					{ 
						if(AOT.id[i]==(int)wParam)
				  		{                                           
							CheckMenuItem(hmenu,AOT.id[child.Info[wIndex].TracingObjectID],MF_UNCHECKED);
							child.Info[wIndex].TracingObjectID=i;
							CheckMenuItem(hmenu,AOT.id[child.Info[wIndex].TracingObjectID],MF_CHECKED);
							wsprintf(lpTmp,"Monitor%d跟踪-%05d",wIndex,AOT.id[child.Info[wIndex].TracingObjectID]);
							SetWindowText(hWnd, lpTmp);
	    					InvalidateRect (hWnd, NULL, TRUE);
							UpdateWindow (hWnd);
							break;                       
			  			};
			
			 	  }//for end

				} //default     
			}

		case WM_PAINT:
		{
			iDate = GetProfileInt (cName, "iDate" , 0);
			GetProfileString (cName,"sDate","/", sDate , 2);
			time(&lTime);

            datetime = localtime(&lTime);
            wsprintf(cBuffer,"%s  %d%s%02d%s%02d  ",(LPSTR)szWday + 8*WDAY
            		,iDate ==1? MDAY  : iDate == 2 ? YEAR :MONTH,(LPSTR)sDate
            		,iDate ==1? MONTH : iDate == 2 ? MONTH:MDAY ,(LPSTR)sDate
            		,iDate ==1? YEAR  : iDate == 2 ? MDAY :YEAR ); 
			
			hDC = BeginPaint (hWnd, &ps);
	    	sprintf(str,"%s","经纬度:");
			TextOut(hDC,10,10,str,strlen(str));
			sprintf(str,"%s","东经: ");
			TextOut(hDC,10,28,str,strlen(str));
			sprintf(str,"%s","北纬: ");
			TextOut(hDC,10,44,str,strlen(str));
			sprintf(str,"速度:");
			TextOut(hDC,10,60,str,strlen(str));
			sprintf(str,"方向:");
			TextOut(hDC,10,80,str,strlen(str));
			sprintf(str,"车辆状态: ");
			TextOut(hDC,10,100,str,strlen(str));
			sprintf(str,"时间:");
			TextOut(hDC,10,120,str,strlen(str));
			sprintf(str,"日期:");
			TextOut(hDC,10,140,str,strlen(str));
			TextOut(hDC,48,140,cBuffer,strlen(cBuffer));			
			child.Info[wIndex].PosFlag=1;

			SetTextColor(hDC,RGB(255,0,0));

			EndPaint(hWnd,&ps);
		}// CASE
		break;               
	
	case WM_DESTROY:
	{
		WORD  i,wWord;
		char szTemp[30];       
		
		DeleteObject(child.Info[wIndex].hCarBmp);
		for(i=wIndex;i<child.num;i++)
		{
			memmove(&child.Info[i],&child.Info[i+1],sizeof(struct Child_Info));
			wWord=SetWindowWord(child.Info[i].hWnd,0,(WPARAM)i);
			wsprintf(szTemp,"Monitor%d跟踪-%05d",i,AOT.id[child.Info[i].TracingObjectID]);
	    	SetWindowText(child.Info[i].hWnd, szTemp);                                
		};         
		memset(&child.Info[i],0,sizeof(struct Child_Info));	
		child.num--;	
	}
		break;
	default:
		 return (DefWindowProc(hWnd, message, wParam, lParam));
	 }
	 return (NULL);
}

BOOL FAR PASCAL TraceManageDlg1(HWND hDlg,unsigned message,
	WORD wParam,LONG lParam)
{
	char str[50];
	DWORD dwCurSel,dwPos;
	int i;

	switch (message) 
	{ 
		case WM_COMMAND:
			switch (wParam) 
			{
				case IDOK: 
					dwCurSel=SendDlgItemMessage(hDlg,IDC_LISTBOX,LB_GETCURSEL,
						0,0);
					if(dwCurSel != LB_ERR)
					{
						SendDlgItemMessage(hDlg,IDC_LISTBOX,LB_GETTEXT,
							(WORD)dwCurSel,(LPARAM)((LPSTR)str));
						curid=atoi(str);
					}
					EndDialog(hDlg, TRUE);
					return (TRUE);
		  		case IDCANCEL:
					EndDialog(hDlg, FALSE);
					return (FALSE);
		  		default:
					break;
		 	}//swith wParam
		 	break;
		case WM_INITDIALOG:  /* message: initialize    */
		  	aID[0]=(UINT)-1;
		  	SendDlgItemMessage(hDlg,IDC_LISTBOX,LB_SETCOLUMNWIDTH,10*8,0L);
		  	for(i=0;i<MAXUNIT;i++)
		  	{
				if(ObjectID[i]==-1) break;
				if(!isActive(ObjectID[i])) continue;
				sprintf(str,"%05d",ObjectID[i]);
				dwPos=SendDlgItemMessage(hDlg,IDC_LISTBOX,LB_ADDSTRING,0,
					(LPARAM)(LPSTR)str);
				if(ObjectID[i]==SingleID)
					SendDlgItemMessage(hDlg,IDC_LISTBOX,LB_SETSEL,TRUE,dwPos);
		  	}
		  	SetFocus(GetDlgItem(hDlg,IDC_LISTBOX));
		  	return FALSE;
	} //switch message
	return FALSE;   // return no procession
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -