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

📄 rudderdevice.cpp

📁 上位机图形显示程序,可用于8051单片机的开发,通信及控制
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	case RD_UPDATED:
		break;
	case RD_UPDATING:
		if(RD_CurrentLevel == RD_ObjectLevel)
		{
			RD_Status = RD_UPDATED;
			break;
		}
		if(RD_CurrentLevel < RD_ObjectLevel)
			RD_RotateDirection = 1;
		else
			RD_RotateDirection = -1;
		RD_CurrentLevel += RD_RotateDirection;
		RD_CurrentAngle = RD_SweepAngle / 2 - (RD_MaxLevel - RD_CurrentLevel) * RD_AnglePerLevel;
		DrawFace();
		break;
	default:
		break;
	}
	CStatic::OnTimer(nIDEvent);
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetStatus(UINT status)
//输入参数:仪表的状态常量,可以是RD_TEST或者是RD_UPDATED
//返回值:无
//作用:设置仪表的当前状态
void RudderDevice::RD_SetStatus(UINT status)
{
	if(status == RD_UPDATING)
		return;
	if(status == RD_TEST)
	{
		KillTimer(1);
		SetTimer(1, 500, NULL);
	}
	if(status == RD_UPDATED)
	{
		KillTimer(1);
		SetTimer(1, 50, NULL);
	}
	RD_Status = status;
	RD_ObjectLevel = RD_CurrentLevel;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetColor(COLORREF color)
//输入参数:仪表颜色
//返回值:无
//作用:设置仪表的颜色(主色调)
void RudderDevice::RD_SetColor(COLORREF color)
{
	RD_Color = color;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetBkColor(COLORREF color)
//输入参数:仪表的背景颜色
//返回值:无
//作用:设置仪表的背景颜色(默认是和对话框背景色相同)
void RudderDevice::RD_SetBkColor(COLORREF color)
{
	RD_BkColor = color;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetLampDarkColor(COLORREF color)
//输入参数:指示灯熄灭状态的颜色
//返回值:无
//作用:设置仪表指示灯熄灭状态的颜色
void RudderDevice::RD_SetLampDarkColor(COLORREF color)
{
	RD_LampDarkColor = color;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetLampLightColor(COLORREF color)
//输入参数:指示灯点亮状态的颜色
//返回值:无
//作用:设置仪表指示灯点亮状态的颜色
void RudderDevice::RD_SetLampLightColor(COLORREF color)
{
	RD_LampLightColor = color;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetLevelRange(int minlv, int maxlv)
//输入参数:仪表能显示的最小档位和最大档位
//返回值:无
//作用:设置仪表显示档位的量程
void RudderDevice::RD_SetLevelRange(int minlv, int maxlv)
{
	RD_MinLevel = minlv;
	RD_MaxLevel = maxlv;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetCurrentLevel(int level)
//输入参数:目标档位
//返回值:无
//作用:设置仪表当前要显示的档位,如果超出量程,按照量程的最大或最小值处理
void RudderDevice::RD_SetCurrentLevel(int level)
{
	if(RD_Status == RD_TEST)
		return;
	if(level > RD_MaxLevel)
		level = RD_MaxLevel;
	if(level < RD_MinLevel)
		level = RD_MinLevel;
	RD_ObjectLevel = level;
	RD_Status = RD_UPDATING;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetCurrentLevel(int level)
//输入参数:目标档位
//返回值:无
//作用:设置仪表当前要显示的档位,如果超出量程,按照量程的最大或最小值处理
void RudderDevice::RD_SetSweepAngle(double angle)
{
	RD_SweepAngle = angle;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetAxleLength(UINT length)
//输入参数:摆动轴的长度
//返回值:无
//作用:设置仪表摆动轴的长度,如果仪表被设置成没有摆动轴(默认),则该函数的调用没有任何效果
void RudderDevice::RD_SetAxleLength(UINT length)
{
	RD_AxleLength = length;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetSize(UINT width, UINT height)
//输入参数:仪表的宽度和高度
//返回值:无
//作用:设置仪表的尺寸,单位是象素
void RudderDevice::RD_SetSize(UINT width, UINT height)
{
	int update = 0;
	if(RD_Origin.x == (long)((RD_Width - 1) / 2) && RD_Origin.y == (long)((RD_Height - 1) / 2))
		update = 1;
	RD_Width = width;
	RD_Height = height;
	if(update)	//设置仪表的原点为窗体的中心
	{
		RD_Origin.x = (long)((RD_Width - 1) / 2);		
		RD_Origin.y = (long)((RD_Height - 1) / 2);
	}
	RECT rect;
	GetWindowRect(&rect);
	MoveWindow(rect.left, rect.top, width, height);
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetFrameRadius(UINT radius)
//输入参数:仪表的柱状表面的半径
//返回值:无
//作用:设置仪表弧形拱起表明的半径(该值将决定金属柱状表面在平面投影的的高度),单位是象素
void RudderDevice::RD_SetFrameRadius(UINT radius)
{
	RD_FrameRadius = radius;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetOrigin(int x, int y)
//输入参数:仪表内部坐标系的原点坐标
//返回值:无
//作用:设置仪表的内部坐标系原点,默认是仪表窗口的中点
void RudderDevice::RD_SetOrigin(int x, int y)
{
	RD_Origin.x = x;
	RD_Origin.y = y;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetLampOffset(int x, int y)
//输入参数:指示灯的x方向和y方向的偏移量
//返回值:无
//作用:设置仪表的指示灯相对于内部坐标原点的偏移量
void RudderDevice::RD_SetLampOffset(int x, int y)
{
	RD_LampOffset.x = x;
	RD_LampOffset.y = y;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetLampSize(UINT width, UINT height)
//输入参数:指示灯的宽度和高度,单位是象素
//返回值:无
//作用:设置仪表的指示灯的尺寸
void RudderDevice::RD_SetLampSize(UINT width, UINT height)
{
	RD_LampWidth = width;
	RD_LampHeight = height;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetFontSize(UINT size)
//输入参数:标注文字的字体大小
//返回值:无
//作用:设置仪表两侧标注文字的字体大小
void RudderDevice::RD_SetFontSize(UINT size)
{
	RD_FontSize = size;
	RD_Font.DeleteObject();
	RD_Font.CreateFont(MulDiv(RD_FontSize, - GetDC()->GetDeviceCaps(LOGPIXELSY), 72), 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, DRAFT_QUALITY, VARIABLE_PITCH | FF_SWISS, _T("Arial"));
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetText(CString textleft, CString textright)
//输入参数:左侧和右侧的标注文字字符串,各档之间的文字用“,”隔开
//返回值:无
//作用:设置仪表两侧标注文字的内容
void RudderDevice::RD_SetText(CString textleft, CString textright)
{
	RD_TextLeft = textleft;
	RD_TextRight = textright;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetHasAxle(UINT command)
//输入参数:0或者1,0表示没有摆动轴,1表示有摆动轴
//返回值:无
//作用:设置仪表是否有摆动轴(默认情况下是没有)
void RudderDevice::RD_SetHasAxle(UINT command)
{
	RD_HasAxle = command;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetTextLightColor(COLORREF color)
//输入参数:颜色值,可用RGB函数获得
//返回值:无
//作用:设置对应于当前指示档的标注文字的颜色
void RudderDevice::RD_SetTextLightColor(COLORREF color)
{	
	RD_TextLightColor = color;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetTextDarkColor(COLORREF color)
//输入参数:颜色值,可用RGB函数获得
//返回值:无
//作用:设置其他未选中档的标注文字的颜色
void RudderDevice::RD_SetTextDarkColor(COLORREF color)
{
	RD_TextDarkColor = color;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetFrameThick(UINT thick)
//输入参数:框架的厚度
//返回值:无
//作用:设置框架的厚度
void RudderDevice::RD_SetFrameThick(UINT thick)
{
	RD_FrameThick = thick;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:RD_SetAxleRadius(UINT radius)
//输入参数:摆动杆的半径
//返回值:无
//作用:设置摆动杆的半径
void RudderDevice::RD_SetAxleRadius(UINT radius)
{
	RD_AxleRadius = radius;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:GetNextColor(COLORREF current_color, int delta)
//输入参数:current_color为源颜色,delta为变化量(可以取正负值)
//返回值:无
//作用:获得current_color的同样色调的下一颜色(如果delta大于0则为更亮的颜色,小于0则为更暗的颜色)
COLORREF RudderDevice::GetNextColor(COLORREF current_color, int delta)
{
	long red, green, blue;
	red = GetRValue(current_color) + delta;
	green = GetGValue(current_color) + delta;
	blue = GetBValue(current_color) + delta;
	if(red > 255)
		red = 255;
	if(green > 255)
		green = 255;
	if(blue > 255)
		blue = 255;
	if(red < 0)
		red = 0;
	if(green < 0)
		green = 0;
	if(blue < 0)
		blue = 0;
	return RGB(red, green, blue);
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:GetNextColor(COLORREF color, double ratio)
//输入参数:current_color为源颜色,ratio为变化比率
//返回值:无
//作用:获得current_color的同样色调的下一颜色(如果ratio大于1则为更亮的颜色,小于1则为更暗的颜色)
COLORREF RudderDevice::GetNextColor(COLORREF current_color, double ratio)
{
	long red, green, blue;
	red = (long)(GetRValue(current_color) * ratio);
	green = (long)(GetGValue(current_color) * ratio);
	blue = (long)(GetBValue(current_color) * ratio);
	if(red > 255)
		red = 255;
	if(green > 255)
		green = 255;
	if(blue > 255)
		blue = 255;
	if(red < 0)
		red = 0;
	if(green < 0)
		green = 0;
	if(blue < 0)
		blue = 0;
	return RGB(red, green, blue);
}

⌨️ 快捷键说明

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