📄 childwnd.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 + -