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

📄 graph.c

📁 C语言编写的监控中心终端程序。基于GPRS上传收发数据功能
💻 C
📖 第 1 页 / 共 5 页
字号:
    MapDrawCirclePart(SX + DX - 1 - R, SY + R,		R, 1);
    MapDrawCirclePart(SX + DX - 1 - R, SY + DY - 1 - R, R, 2);
    MapDrawCirclePart(SX + R,	       SY + DY - 1 - R, R, 3);
    MapDrawCirclePart(SX + R,	       SY + R,		R, 4);
}

void MapFillCircleRect(INT16 SX, INT16 SY, INT16 DX, INT16 DY, INT16 R)
{
    UINT16		i;

    if (R) {
	MapDrawRound(SX		 + R, SY + R, R);
	MapDrawRound(SX + DX - 1 - R, SY + R, R);
	for (i = 0; i < R; i++)	{
	    MapDrawLine(SX + (R - i),		SY + i,
			SX + DX - 1 - (R - i),	SY + i);
	}
    }

    for (i = 0; i < DY - (R << 1); i++)
	MapDrawLine(SX, SY + R + i, SX + DX - 1, SY + R + i);

    if (R) {
	MapDrawRound(SX + DX - 1 - R, SY + DY - 1 - R, R);
	MapDrawRound(SX		 + R, SY + DY - 1 - R, R);
	for (i = 0; i < R; i++)	{
	    MapDrawLine(SX + i,		 SY + DY - 1 - (R - i),
			SX + DX - 1 - i, SY + DY - 1 - (R - i));
	}
    }
}

#if 0
#define LINE_FILL_COLOR		0xB08080
#define LINE_DARK_COLOR		0x408080	
#define LINE_BRIGHT_COLOR	0xE08080

#define BTM_BOX_X		24
#define BTM_BOX_Y		520
#define BTM_BOX_W		(704 - 24 - 24)
#define BTM_BOX_H		44
#define BTM_FRAME		2
#ifdef SUPPORT_GPS_TR2000
#define BTM_TOTAL		2
#define BTM_COL_1		(BTM_BOX_W - BTM_COL_2)
#define BTM_COL_2		(200)
#elif	defined(SUPPORT_BUS_DEVICE)
#define BTM_TOTAL		2
#define BTM_COL_1		(BTM_BOX_W - BTM_COL_2)
#define BTM_COL_2		(128 + 8)
#else
#define BTM_TOTAL		2
#define BTM_COL_1		(BTM_BOX_W - BTM_COL_2)
#define BTM_COL_2		( 80)
#endif
#define BTM_CHR_1		(BTM_COL_1 / 12 - 2)

const MAP_ZONE		MapBottomZone[BTM_TOTAL] = {
    {	BTM_BOX_X + BTM_FRAME,
	BTM_BOX_Y + BTM_FRAME,
	BTM_COL_1 - BTM_FRAME * 2,
	BTM_BOX_H - BTM_FRAME * 2 },
#if BTM_TOTAL > 1
    {	BTM_BOX_X + BTM_FRAME + BTM_COL_1,
	BTM_BOX_Y + BTM_FRAME,
	BTM_COL_2 - BTM_FRAME * 2,
	BTM_BOX_H - BTM_FRAME * 2 },
#endif
#if BTM_TOTAL > 2
    {	BTM_BOX_X + BTM_FRAME + BTM_COL_1 + BTM_COL_2,
	BTM_BOX_Y + BTM_FRAME,
	BTM_COL_2 - BTM_FRAME * 2,
	BTM_BOX_H - BTM_FRAME * 2 },
#endif
};

void MapDrawBottom()
{
    BYTE		i;

    MapSetColor(LINE_FILL_COLOR);
    MapFillRectangle(0,			BTM_BOX_Y,
//		     MAP_SIZE_X,	BTM_BOX_Y + BTM_BOX_H);
		     MAP_SIZE_X,	MAP_SIZE_Y);

    MapSetColor(LINE_DARK_COLOR);
    for (i = 0; i < BTM_TOTAL; i++) {
	MapFillRectangle(MapBottomZone[i].x,
			 MapBottomZone[i].y,
			 MapBottomZone[i].x + MapBottomZone[i].w,
			 MapBottomZone[i].y + BTM_FRAME);
	MapFillRectangle(MapBottomZone[i].x,
			 MapBottomZone[i].y,
			 MapBottomZone[i].x + BTM_FRAME,
			 MapBottomZone[i].y + MapBottomZone[i].h);
    }

    MapSetColor(LINE_BRIGHT_COLOR);
    for (i = 0; i < BTM_TOTAL; i++) {
	MapFillRectangle(MapBottomZone[i].x + BTM_FRAME,
			 MapBottomZone[i].y + MapBottomZone[i].h - BTM_FRAME,
			 MapBottomZone[i].x + MapBottomZone[i].w,
			 MapBottomZone[i].y + MapBottomZone[i].h);
	MapFillRectangle(MapBottomZone[i].x + MapBottomZone[i].w,
			 MapBottomZone[i].y,
			 MapBottomZone[i].x + MapBottomZone[i].w + BTM_FRAME,
			 MapBottomZone[i].y + MapBottomZone[i].h);
    }

    MapBottomHoldFlag = 0;
}

void MapDrawBottomIcon(BYTE *Str, BYTE State, BYTE Pos)
{
    UINT16		x, y;

    x = MapBottomZone[1].x + 64 * Pos + BTM_FRAME * 4;
    y = MapBottomZone[1].y	      + BTM_FRAME * 2;

    MapSaveColor();
    MapSaveFontSize();
    MapSetFontSize(24);

    if (State)	MapSetColor(MAP_COLOR_GREEN);
    else	MapSetColor(MAP_COLOR_RED);
    MapFillCircleRect(x, y, 64 - BTM_FRAME * 4, MapBottomZone[1].h - BTM_FRAME * 4, 4);

    MapSetColor(MAP_COLOR_WHITE);
    x += (64 - BTM_FRAME * 4 - strlen(Str) * 12) / 2;
    y += (MapBottomZone[1].h - BTM_FRAME * 4 - 24) / 2;
    MapDrawString(x, y, Str);

    MapRestoreFontSize();
    MapRestoreColor();
}

void MapDrawBottomString(BYTE *Data, BYTE Level)
{
    UINT32		FontColor;

    if (MapBottomHoldFlag && !(Level & STR_LEVEL_HOLD))	return;

    switch (Level & (~STR_LEVEL_HOLD)) {
    case STR_LEVEL_BORDER:
    	FontColor = MAP_COLOR_BLUE;
	break;
    case STR_LEVEL_WARNING:
    	FontColor = MAP_COLOR_MAGENTA;
	break;
    case STR_LEVEL_ERROR:
    	FontColor = MAP_COLOR_RED;
	break;
    default:
    	FontColor = MAP_COLOR_BLACK;
	break;
    }

#if 1
    strcpychn(MapRollText, Data, BTM_CHR_1);
#else
    if (strlen(Data) > BTM_CHR_1) {
	MapSetColor(LINE_FILL_COLOR);
	MapFillRectangle(MapBottomZone[0].x + 12,
			 MapBottomZone[0].y + BTM_FRAME,
			 MapBottomZone[0].x + MapBottomZone[0].w - BTM_FRAME,
			 MapBottomZone[0].y + MapBottomZone[0].h - BTM_FRAME);
	MapRollFontColor = FontColor;
	MapRollBackColor = LINE_FILL_COLOR;
	strcpy(MapRollText, Data);

	MapRollSize = strlen(MapRollText);
	MapRollAddr = 0;
	MapRollStep = 0;
	MapRollFlag = TRUE;
    }
    else
#endif
    {
	MapSaveColor();
	MapSaveFontSize();

	MapSetColor(FontColor);
	MapSetBackColor(LINE_FILL_COLOR);
	MapSetFontSize(24);

	MapFillString(MapBottomZone[0].x + 12,
		      MapBottomZone[0].y + (MapBottomZone[0].h - 24) / 2, Data);
	MapSetColor(LINE_FILL_COLOR);
	MapFillRectangle(MapBottomZone[0].x + 12 + strlen(Data) * 12,
			 MapBottomZone[0].y + BTM_FRAME,
			 MapBottomZone[0].x + MapBottomZone[0].w - BTM_FRAME,
			 MapBottomZone[0].y + MapBottomZone[0].h - BTM_FRAME);

	MapRestoreFontSize();
	MapRestoreColor();

	MapRollFlag = FALSE;
    }

    if (Level & STR_LEVEL_HOLD) {
	MapBottomHoldFlag  = 1;
	MapBottomHoldTimer = 50;		// * 100mS
    }
}

#define	ROLL_START_X		(BTM_BOX_X + 12)
#define	ROLL_START_Y		(BTM_BOX_Y + (BTM_BOX_H - 24) / 2)
#define	ROLL_FONT_WIDTH		(BTM_CHR_1 / 2)
#define	ROLL_WIDTH		(BTM_CHR_1 * 12)
#define	ROLL_HEIGHT		(24)
#define	ROLL_STEP		(12)
#define	ROLL_CHAR		(24)
#define	ROLL_FONT_X		(ROLL_START_X + ROLL_WIDTH - ROLL_STEP)
#define	ROLL_FONT_Y		(ROLL_START_Y)

void PollingMapRoll()
{
    if (!MapRollFlag)		return;

    MapMoveWindowLeft(ROLL_START_X, ROLL_START_Y, ROLL_WIDTH, ROLL_HEIGHT, ROLL_STEP);

    if (MapRollAddr >= MapRollSize + ROLL_FONT_WIDTH) {
	MapRollAddr = 0;
    }
    else if (MapRollAddr >= MapRollSize) {
	MapSaveColor();
	MapSetColor(MapRollBackColor);
	MapFillRectangle(ROLL_FONT_X,		  ROLL_FONT_Y,
			 ROLL_FONT_X + ROLL_STEP, ROLL_FONT_Y + ROLL_HEIGHT);
	MapRestoreColor();

	MapRollStep += ROLL_STEP;
	if (MapRollStep >= ROLL_CHAR / 2) {
	    MapRollAddr++;
	    MapRollStep = 0;
	}
    }
    else {
	MapSaveColor();
	MapSetColor(MapRollBackColor);
	MapFillRectangle(ROLL_FONT_X, ROLL_FONT_Y,
			 ROLL_FONT_X + ROLL_STEP, ROLL_FONT_Y + ROLL_HEIGHT);

	MapSaveFontSize();
	MapSetFontSize(ROLL_CHAR);
	MapSetColor(MapRollFontColor);
	MapDrawFontPart(ROLL_FONT_X, ROLL_FONT_Y,
			MapRollText + MapRollAddr, MapRollStep, ROLL_STEP);
	MapRestoreColor();
	MapRestoreFontSize();

	MapRollStep += ROLL_STEP;
	if (MapRollText[MapRollAddr] < 161 || MapRollText[MapRollAddr + 1] < 161) {
	    if (MapRollStep >= ROLL_CHAR / 2) {
		MapRollStep  = 0;
		MapRollAddr++;
	    }
	}
	else {
	    if (MapRollStep >= ROLL_CHAR) {
		MapRollStep  = 0;
		MapRollAddr += 2;
	    }
	}
    }
}

#define	BOOK_BOX_X		100
#define	BOOK_BOX_Y		124
#define	BOOK_BOX_C		42
#define	BOOK_BOX_R		(BOOK_ZONE_0_R + BOOK_ZONE_1_R + BOOK_ZONE_2_R)
#define	BOOK_BOX_W		(BOOK_BOX_C * BOOK_COL_W)
#define	BOOK_BOX_H		(BOOK_BOX_R * BOOK_ROW_H + BOOK_FRAME * (BOOK_ZONE_V - 1))
#define	BOOK_COL_W		(12)
#define	BOOK_ROW_H		(24 + BOOK_FRAME * 2)

#define	BOOK_FRAME		8

#define	BOOK_ZONE_V		3
#define	BOOK_ZONE_0_R		1
#define	BOOK_ZONE_1_R		6
#define	BOOK_ZONE_2_R		1
#define	BOOK_ZONE_0_C		3
#define	BOOK_ZONE_1_C		1
#define	BOOK_ZONE_2_C		4

#define	BOOK_ZONE_ALL		(BOOK_ZONE_0_C + BOOK_ZONE_1_C + BOOK_ZONE_2_C)

const MENU_BASE		BookMenuZone[BOOK_ZONE_ALL] = {
    {	BOOK_BOX_X,
	BOOK_BOX_Y,
       (BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C,
	BOOK_ZONE_0_R * BOOK_ROW_H,
	MAP_COLOR_BLUE,
	MAP_COLOR_WHITE,
	24,
	'C',
	"",		},

    {	BOOK_BOX_X + (BOOK_BOX_W + BOOK_FRAME) / BOOK_ZONE_2_C,
	BOOK_BOX_Y,
       (BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C * 2 + BOOK_FRAME,
	BOOK_ZONE_0_R * BOOK_ROW_H,
	MAP_COLOR_BLUE,
	MAP_COLOR_WHITE,
	24,
	'C',
	"",		},

    {	BOOK_BOX_X + (BOOK_BOX_W + BOOK_FRAME) * 3 / BOOK_ZONE_2_C,
	BOOK_BOX_Y,
       (BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C,
	BOOK_ZONE_0_R * BOOK_ROW_H,
	MAP_COLOR_BLUE,
	MAP_COLOR_WHITE,
	24,
	'C',
	"",		},

    {	BOOK_BOX_X,
	BOOK_BOX_Y + BOOK_ZONE_0_R * BOOK_ROW_H + BOOK_FRAME,
	BOOK_BOX_W,
	BOOK_ZONE_1_R * BOOK_ROW_H,
	0xB08080,
	MAP_COLOR_BLACK,
	24,
	'C',
	"",		},

    {	BOOK_BOX_X,
	BOOK_BOX_Y + (BOOK_ZONE_0_R + BOOK_ZONE_1_R) * BOOK_ROW_H + BOOK_FRAME * 2,
       (BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C,
	BOOK_ZONE_2_R * BOOK_ROW_H,
	MAP_COLOR_CYAN,
	MAP_COLOR_BLACK,
	24,
	'C',
	"",		},

    {	BOOK_BOX_X + (BOOK_BOX_W + BOOK_FRAME) / BOOK_ZONE_2_C,
	BOOK_BOX_Y + (BOOK_ZONE_0_R + BOOK_ZONE_1_R) * BOOK_ROW_H + BOOK_FRAME * 2,
       (BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C,
	BOOK_ZONE_2_R * BOOK_ROW_H,
	MAP_COLOR_CYAN,
	MAP_COLOR_BLACK,
	24,
	'C',
	"",		},

    {	BOOK_BOX_X + (BOOK_BOX_W + BOOK_FRAME) * 2 / BOOK_ZONE_2_C,
	BOOK_BOX_Y + (BOOK_ZONE_0_R + BOOK_ZONE_1_R) * BOOK_ROW_H + BOOK_FRAME * 2,
       (BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C,
	BOOK_ZONE_2_R * BOOK_ROW_H,
	MAP_COLOR_CYAN,
	MAP_COLOR_BLACK,
	24,
	'C',
	"",		},

    {	BOOK_BOX_X + (BOOK_BOX_W + BOOK_FRAME) * 3 / BOOK_ZONE_2_C,
	BOOK_BOX_Y + (BOOK_ZONE_0_R + BOOK_ZONE_1_R) * BOOK_ROW_H + BOOK_FRAME * 2,
       (BOOK_BOX_W - (BOOK_ZONE_2_C - 1) * BOOK_FRAME) / BOOK_ZONE_2_C,
	BOOK_ZONE_2_R * BOOK_ROW_H,
	MAP_COLOR_CYAN,
	MAP_COLOR_BLACK,
	24,
	'C',
	"返回",		},
};

void MapDrawBook()
{
    BYTE		i;

    MapSaveWindow(BOOK_BOX_Y - BOOK_FRAME, BOOK_BOX_H + BOOK_FRAME * 2);

    MapSetColor(MAP_COLOR_GRAY);
    MapFillRectangle(BOOK_BOX_X		     - BOOK_FRAME,
		     BOOK_BOX_Y		     - BOOK_FRAME,
		     BOOK_BOX_X + BOOK_BOX_W + BOOK_FRAME,
		     BOOK_BOX_Y + BOOK_BOX_H + BOOK_FRAME);

    for (i = 0; i < BOOK_ZONE_ALL; i++) {
	MapSetColor(BookMenuZone[i].BackColor);
	MapFillCircleRect(BookMenuZone[i].x, BookMenuZone[i].y,
			  BookMenuZone[i].w, BookMenuZone[i].h, 4);
	MapDrawBookZone((BYTE *)BookMenuZone[i].Text, i);
    }
}

void MapHideBook()
{
    MapLoadWindow(BOOK_BOX_Y - BOOK_FRAME, BOOK_BOX_H + BOOK_FRAME * 2);
}

void MapDrawBookZone(BYTE *Str, BYTE Zone)
{
    UINT16		i, j;
    UINT16		x, y;
    UINT16		n, c;

    MapSaveFontSize();
    MapSetFontSize(24);

    MapSetColor(BookMenuZone[Zone].FontColor);
    MapSetBackColor(BookMenuZone[Zone].BackColor);
    if (Zone == 3) {
	x = BookMenuZone[Zone].x +  BOOK_COL_W;
	y = BookMenuZone[Zone].y + (BOOK_ROW_H - 12) / 2;
	for (n = 0, i = 0; i < BOOK_ZONE_1_R; i++) {
	    if (n >= strlen(Str)) {
		LineBuffer[0] = 0;
	    }
	    else
	    if (strlen(Str + n) > BOOK_BOX_C - 2) {
		strcpylen(LineBuffer, Str + n, BOOK_BOX_C - 2);
		n += BOOK_BOX_C - 2;
		for (c = 0, j = 0; j < BOOK_BOX_C - 2; j++) {
		    if (LineBuffer[j] > 0x7F)	c ^= 0x01;
		}
		if (LineBuffer[BOOK_BOX_C - 2 - 1] > 0x7F && c) {
		    LineBuffer[BOOK_BOX_C - 2 - 1] = 0;
		    n--;
		}
	    }
	    else {
		strcpy(LineBuffer, Str + n);
		n += strlen(LineBuffer);
	    }

	    for (j = strlen(LineBuffer); j < BOOK_BOX_C - 2; j++) {
		LineBuffer[j] = ' ';
	    }
	    LineBuffer[BOOK_BOX_C - 2] = 0;
	    MapFillString(x, y, LineBuffer);
	    y += BOOK_ROW_H;
	}
    }
    else {
	MapFillString(BookMenuZone[Zone].x + (BookMenuZone[Zone].w - (strlen(Str) * 12)) / 2,
		      BookMenuZone[Zone].y + (BookMenuZone[Zone].h - 24) / 2, Str);
    }

    MapRestoreFontSize();
}

#define	PHONE_BOX_X		188
#define	PHONE_BOX_Y		124
#define	PHONE_BOX_C		26
#define	PHONE_BOX_R		(PHONE_ZONE_0_R + PHONE_ZONE_1_R + PHONE_ZONE_2_R + PHONE_ZONE_3_R + PHONE_ZONE_4_R + PHONE_ZONE_5_R)
#define	PHONE_BOX_W		(PHONE_BOX_C * PHONE_COL_W)
#define	PHONE_BOX_H		(PHONE_BOX_R * PHONE_ROW_H + PHONE_FRAME * (PHONE_ZONE_V - 1))
#define	PHONE_COL_W		(12)
#define	PHONE_ROW_H		(24 + PHONE_FRAME * 2)

#define	PHONE_FRAME		8

#define	PHONE_ZONE_V		6
#define	PHONE_ZONE_0_R		1
#define	PHONE_ZONE_1_R		1
#define	PHONE_ZONE_2_R		1
#define	PHONE_ZONE_3_R		1
#define	PHONE_ZONE_4_R		1
#define	PHONE_ZONE_5_R		1
#define	PHONE_ZONE_0_C		1
#define	PHONE_ZONE_1_C		2
#define	PHONE_ZONE_2_C		4
#define	PHONE_ZONE_3_C		4
#define	PHONE_ZONE_4_C		4
#define	PHONE_ZONE_5_C		4

#define	PHONE_ZONE_ALL		(PHONE_ZONE_0_C + PHONE_ZONE_1_C + PHONE_ZONE_2_C + PHONE_ZONE_3_C + PHONE_ZONE_4_C + PHONE_ZONE_5_C)
#define	PHONE_SHOW_MAX		(18)

const MENU_BASE		PhoneMenuZone[PHONE_ZONE_ALL] = {
    {	PHONE_BOX_X,
	PHONE_BOX_Y,
	PHONE_BOX_W,
	PHONE_ZONE_0_R * PHONE_ROW_H,
	MAP_COLOR_BLUE,
	MAP_COLOR_WHITE,
	24,
	'C',
	"拨打电话",	},

    {	PHONE_BOX_X,
	PHONE_BOX_Y + PHONE_ZONE_0_R * PHONE_ROW_H + PHONE_FRAME + 1,
       (PHONE_BOX_W + PHONE_FRAME) * 3 / PHONE_ZONE_2_C - PHONE_FRAME,
	PHONE_ZONE_1_R * PHONE_ROW_H,
	0xB08080,
	MAP_COLOR_BLACK,
	24,
	'C',
	"",		},

    {	PHONE_BOX_X + (PHONE_BOX_W + PHONE_FRAME) * 3 / PHONE_ZONE_2_C,
	PHONE_BOX_Y + PHONE_ZONE_0_R * PHONE_ROW_H + PHONE_FRAME,
       (PHONE_BOX_W - (PHONE_ZONE_2_C - 1) * PHONE_FRAME) / PHONE_ZONE_2_C,
	PHONE_ZONE_1_R * PHONE_ROW_H,
	MAP_COLOR_CYAN,
	MAP_COLOR_BLACK,
	24,
	'C',
	"删除",		},

    {	PHONE_BOX_X,
	PHONE_BOX_Y + (PHONE_ZONE_0_R + PHONE_ZONE_1_R) * PHONE_ROW_H + PHONE_FRAME * 2,
       (PHONE_BOX_W - (PHONE_ZONE_2_C - 1) * PHONE_FRAME) / PHONE_ZONE_2_C,

⌨️ 快捷键说明

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