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

📄 lamparray.cpp

📁 郎顿51开发板上位机代码 帮助你快速开发工控程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	LA_Rows = rows;
	LA_Columns = columns;
	delete [] LA_LampStatus;
	LA_LampStatus = new int[LA_Rows * LA_Columns];
	memset((void *)LA_LampStatus, 0, LA_Rows * LA_Columns * sizeof(LA_LampStatus[0]));
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetSize(UINT width, UINT height)
//输入参数:仪表的宽度width和高度height,单位是象素
//返回值:无
//作用:设置仪表的大小
void LampArray::LA_SetSize(UINT width, UINT height)
{
	LA_Width = width;
	LA_Height = height;
	RECT rect;
	GetWindowRect(&rect);
	MoveWindow(rect.left, rect.top, width, height);
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetLampSize(UINT width, UINT height)
//输入参数:灯的宽度width和高度height(对于椭圆灯,则是两个椭圆轴的长度),单位是象素
//返回值:无
//作用:设置灯的大小
void LampArray::LA_SetLampSize(UINT width, UINT height)
{
	LA_LampWidth = width;
	LA_LampHeight = height;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetLampStyle(UINT style)
//输入参数:灯的样式常量,可以是LA_RECTANGLE(矩形)或者LA_ELLIPSE(椭圆)
//返回值:无
//作用:设置灯的样式
void LampArray::LA_SetLampStyle(UINT style)
{
	LA_LampStyle = style;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetBorderStyle(UINT left, UINT top, UINT right, UINT bottom)
//输入参数:标志各边界是否显示的变量,0表示不显示,1表示显示
//返回值:无
//作用:设置仪表边界的样式
void LampArray::LA_SetBorderStyle(UINT left, UINT top, UINT right, UINT bottom)
{
	LA_BorderLeft = left;
	LA_BorderTop = top;
	LA_BorderRight = right;
	LA_BorderBottom = bottom;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetTextOffset(int x, int y)
//输入参数:x方向和y方向的偏移量
//返回值:无
//作用:设置文字相对于灯左上角的位置
void LampArray::LA_SetTextOffset(int x, int y)
{
	LA_TextOffset.x = x;
	LA_TextOffset.y = y;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetTextColor(COLORREF color)
//输入参数:文字的颜色
//返回值:无
//作用:设置文字的颜色
void LampArray::LA_SetTextColor(COLORREF color)
{
	LA_TextColor = color;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetLampDarkColor(COLORREF color)
//输入参数:灯熄灭时的颜色
//返回值:无
//作用:设置灯在熄灭状态下的颜色
void LampArray::LA_SetLampDarkColor(COLORREF color)
{
	LA_LampDarkColor = color;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetLampLightColor(COLORREF color)
//输入参数:灯点亮时的颜色
//返回值:无
//作用:设置灯在点亮状态下的颜色
void LampArray::LA_SetLampLightColor(COLORREF color)
{
	LA_LampLightColor = color;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetBorderWidth(UINT width)
//输入参数:边界宽度,单位是象素
//返回值:无
//作用:设置仪表边界的宽度
void LampArray::LA_SetBorderWidth(UINT width)
{
	LA_BorderWidth = width;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetBorderColor(COLORREF lightcolor, COLORREF darkcolor)
//输入参数:边界的亮部颜色lightcolor和暗部颜色darkcolor
//返回值:无
//作用:设置仪表边界的颜色
void LampArray::LA_SetBorderColor(COLORREF lightcolor, COLORREF darkcolor)
{
	LA_BdLightColor = lightcolor;
	LA_BdDarkColor = darkcolor;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetText(CString text)
//输入参数:所有灯对应的文字,各灯的文字用“,”分隔开,如果设置为"",表示不需要文字
//返回值:无
//作用:设置所有灯对应的文字
void LampArray::LA_SetText(CString text)
{
	LA_Text = text;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetLampPos(int x, int y)
//输入参数:第一个灯相对于仪表左上角的坐标偏移量
//返回值:无
//作用:设置灯的位置
void LampArray::LA_SetLampPos(int x, int y)
{
	LA_LampPos.x = x;
	LA_LampPos.y = y;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetLampBdWidth(UINT width)
//输入参数:灯的边界宽度,单位是象素
//返回值:无
//作用:设置灯的边界宽度(对于椭圆灯,该函数完全无效)
void LampArray::LA_SetLampBdWidth(UINT width)
{
	LA_LampBdWidth = width;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetLampSpace(UINT x_space, UINT y_space)
//输入参数:灯在X方向的间距x_space和在Y方向的间距y_space
//返回值:无
//作用:设置灯的间距
void LampArray::LA_SetLampSpace(UINT x_space, UINT y_space)
{
	LA_LampXSpace = x_space;
	LA_LampYSpace = y_space;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_TurnOnAllLamp()
//输入参数:无
//返回值:无
//作用:点亮阵列内所有的灯
void LampArray::LA_TurnOnAllLamp()
{
	UINT i;
	for(i = 0; i < LA_Rows * LA_Columns; i ++)
		LA_LampStatus[i] = 1;
	DrawFace();
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_TurnOffAllLamp()
//输入参数:无
//返回值:无
//作用:熄灭阵列内所有的灯
void LampArray::LA_TurnOffAllLamp()
{
	UINT i;
	for(i = 0; i < LA_Rows * LA_Columns; i ++)
		LA_LampStatus[i] = 0;
	DrawFace();
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_InverseLampStatus(UINT offset)
//输入参数:要取反的灯的位置序号offset(相对于第一个灯,第一个灯序号为0)
//返回值:无
//作用:将指定的灯状态取反
void LampArray::LA_InverseLampStatus(UINT offset)
{
	if(offset > LA_Rows * LA_Columns - 1)
		return;

	if(LA_LampStatus[offset])
		LA_LampStatus[offset] = 0;
	else
		LA_LampStatus[offset] = 1;
	DrawFace();
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_InverseLampStatus(UINT rows, UINT columns)
//输入参数:要取反的灯的行位置rows和列位置columns,要注意行和列是从0开始算起的
//返回值:无
//作用:将指定的灯状态取反
void LampArray::LA_InverseLampStatus(UINT rows, UINT columns)
{
	if(rows * LA_Columns + columns > LA_Rows * LA_Columns - 1)
		return;
	UINT i, j;
	for(i = 0; i < LA_Rows; i ++)
	{
		for(j = 0; j < LA_Columns; j ++)
		{
			if(i == rows && j == columns)
			{
				if(LA_LampStatus[i * LA_Columns + j])
					LA_LampStatus[i * LA_Columns + j] = 0;
				else
					LA_LampStatus[i * LA_Columns + j] = 1;
				DrawFace();
				return;
			}
		}
	}
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_InverseAllLampStatus()
//输入参数:无
//返回值:无
//作用:将阵列内所有的灯状态取反
void LampArray::LA_InverseAllLampStatus()
{
	UINT i;
	for(i = 0; i < LA_Rows * LA_Columns; i ++)
		LA_InverseLampStatus(i);
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_GetSubText(UINT offset)
//输入参数:要取文字的灯的位置序号offset(相对于第一个灯,第一个灯序号为0)
//返回值:要获取的字符串
//作用:该函数获取某一个灯对应的文字
CString LampArray::LA_GetSubText(UINT offset)
{
	int index;
	UINT k;
	CString alltext = LA_Text, text;
	for(k = 0; k < LA_Rows * LA_Columns; k ++)
	{
		index = alltext.Find(",");	
		if(index != -1)
			text = alltext.Left(index);
		else
			text = alltext;	
		alltext = alltext.Right(alltext.GetLength() - text.GetLength() - 1);
		if(offset == k)
			return text;
	}
	return "";
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_GetSubText(UINT rows, UINT columns)
//输入参数:要取文字的灯的行位置rows和列位置columns,要注意行和列是从0开始算起的
//返回值:要获取的字符串
//作用:该函数获取某一个灯对应的文字
CString LampArray::LA_GetSubText(UINT rows, UINT columns)
{
	int index;
	UINT i, j, k;
	CString alltext = LA_Text, text;
	for(k = 0; k < LA_Rows * LA_Columns; k ++)
	{
		index = alltext.Find(",");	
		if(index != -1)
			text = alltext.Left(index);
		else
			text = alltext;	
		alltext = alltext.Right(alltext.GetLength() - text.GetLength() - 1);
		i = k / LA_Columns;
		j = k % LA_Columns;
		if(i == rows && j == columns)
			return text;
	}	
	return "";
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetSubText(UINT offset, CString text)
//输入参数:要设置文字的灯的位置序号offset(相对于第一个灯,第一个灯序号为0),以及要设置的字符串text
//返回值:无
//作用:该函数设置某一个灯对应的文字
void LampArray::LA_SetSubText(UINT offset, CString subtext)
{
	int index;
	UINT k;
	CString alltext = LA_Text, text, newtext = "";
	for(k = 0; k < LA_Rows * LA_Columns; k ++)
	{
		index = alltext.Find(",");	
		if(index != -1)
			text = alltext.Left(index);
		else
			text = alltext;	
		alltext = alltext.Right(alltext.GetLength() - text.GetLength() - 1);

		if(offset == k)
			newtext += subtext;
		else
			newtext += text;
		if(k != LA_Rows * LA_Columns - 1)
			newtext += ",";
	}
	LA_Text = newtext;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:LA_SetSubText(UINT rows, UINT columns, CString text)
//输入参数:要设置文字的灯的行位置rows和列位置columns(注意行和列是从0开始算起的),以及要设置的字符串text
//返回值:无
//作用:该函数设置某一个灯对应的文字
void LampArray::LA_SetSubText(UINT rows, UINT columns, CString subtext)
{
	int index;
	UINT i, j, k;
	CString alltext = LA_Text, text, newtext = "";
	for(k = 0; k < LA_Rows * LA_Columns; k ++)
	{
		index = alltext.Find(",");	
		if(index != -1)
			text = alltext.Left(index);
		else
			text = alltext;	
		alltext = alltext.Right(alltext.GetLength() - text.GetLength() - 1);
		
		i = k / LA_Columns;
		j = k % LA_Columns;
		if(i == rows && j == columns)
			newtext += subtext;
		else
			newtext += text;
		if(k != LA_Rows * LA_Columns - 1)
			newtext += ",";
	}
	LA_Text = newtext;
}


/////////////////////////////////////////////////////////////////////////////////////////
//函数名:GetNextColor(COLORREF current_color, int delta)
//输入参数:current_color为源颜色,delta为变化量(可以取正负值)
//返回值:无
//作用:获得current_color的同样色调的下一颜色(如果delta大于0则为更亮的颜色,小于0则为更暗的颜色)
COLORREF LampArray::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 LampArray::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 + -