📄 curvedevice.cpp
字号:
//将内存DC的内容一次画在屏幕DC上
dc.BitBlt(0, 0, bmp.bmWidth, bmp.bmHeight, &dcmem, 0, 0, SRCCOPY);
dcmem.SelectObject(pbitmapold);
bmpc.DeleteObject();
dcmem.DeleteDC();
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_MoveWindow(int x, int y)
//输入参数:仪表窗口左上角新位置坐标
//返回值:无
//作用:移动仪表窗口
void CurveDevice::CD_MoveWindow(int x, int y)
{
CRect rect;
GetWindowRect(&rect);
MoveWindow(x, y, rect.Width(), rect.Height(), true);
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetRecordLength(UINT length)
//输入参数:数组长度
//返回值:无
//作用:设置仪表内置记录数组的长度,该长度不应该小于要显示曲线在显示区的抽样点数目
void CurveDevice::CD_SetRecordLength(UINT length)
{
delete [] CD_Record; //删除旧的记录内存段
CD_RecordLength = length; //设置新的记录长度
CD_Record = new int[length]; //分配新的内存空间
memset(CD_Record, 0, length * sizeof(CD_Record[0])); //把新的记录清零
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetStatus(UINT status)
//输入参数:状态常量,可以是CD_TEST(自检状态)或者CD_WORK(工作状态)
//返回值:无
//作用:设置仪表的当前状态
void CurveDevice::CD_SetStatus(UINT status)
{
memset(CD_Record, 0, CD_RecordLength * sizeof(CD_Record[0])); //记录清零
CD_Status = status;
CD_RecordStartPos = 0; //将相关变量复位
CD_CurrentNumber = 0;
if(status == CD_TEST) //自检状态,有默认的抽样时间间隔
CD_SetTimer(20);
DrawFace();
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetTimer(UINT time)
//输入参数:以毫秒为单位的时间
//返回值:无
//作用:设置仪表的单位抽样时间,决定抽样的精度和曲线平移速度
void CurveDevice::CD_SetTimer(UINT time)
{
CD_Timer = time;
KillTimer(1);
SetTimer(1, time, NULL);
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetSize(UINT width, UINT height)
//输入参数:仪表的宽度和仪表的高度,单位是象素
//返回值:无
//作用:设置仪表的尺寸
void CurveDevice::CD_SetSize(UINT width, UINT height)
{
CD_Width = width;
CD_Height = height;
RECT rect;
GetWindowRect(&rect);
MoveWindow(rect.left, rect.top, width, height);
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetOrigin(int x, int y)
//输入参数:仪表的内部原点相对于仪表左上角的的坐标
//返回值:无
//作用:设置仪表的内部坐标系原点位置
void CurveDevice::CD_SetOrigin(int x, int y)
{
CD_Origin.x = x;
CD_Origin.y = y;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetGridSize(UINT x_width, UINT y_width)
//输入参数:格子在X轴方向的宽度和在Y方向的宽度
//返回值:无
//作用:设置仪表背景的格子大小
void CurveDevice::CD_SetGridSize(UINT x_width, UINT y_width)
{
CD_XGridLength = x_width;
CD_YGridLength = y_width;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetGridNumber(UINT x_number, UINT y_number)
//输入参数:格子在X轴方向的数量和在Y方向的数量
//返回值:无
//作用:设置仪表背景的格子数量
void CurveDevice::CD_SetGridNumber(UINT x_number, UINT y_number)
{
CD_XGridNum = x_number;
CD_YGridNum = y_number;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetBorderWidth(UINT width)
//输入参数:边框宽度,单位是象素
//返回值:无
//作用:设置仪表立体边框的宽度
void CurveDevice::CD_SetBorderWidth(UINT width)
{
CD_BorderWidth = width;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetAxleLength(UINT length)
//输入参数:Y轴长度,单位是象素
//返回值:无
//作用:设置仪表显示的函数值对应的轴(对于水平放置,是y轴,否则是x轴)能达到的最大高度
void CurveDevice::CD_SetAxleLength(UINT length)
{
CD_AxleLength = length;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetStepLength(UINT length)
//输入参数:步长,单位是象素
//返回值:无
//作用:设置各个抽样点在X轴方向的间距(默认是1象素)
void CurveDevice::CD_SetStepLength(UINT length)
{
CD_StepLength = length;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetBorderStyle(UINT left, UINT top, UINT right, UINT bottom)
//输入参数:四个变量分别表示左、上、右、下边框是否显示,0表示不显示,1表示显示
//返回值:无
//作用:设置仪表的边框显示样式(该功能常用于仪表组合)
void CurveDevice::CD_SetBorderStyle(UINT left, UINT top, UINT right, UINT bottom)
{
CD_BorderTop = top;
CD_BorderBottom = bottom;
CD_BorderLeft = left;
CD_BorderRight = right;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetBkColor(COLORREF color)
//输入参数:背景颜色
//返回值:无
//作用:设置仪表的背景颜色
void CurveDevice::CD_SetBkColor(COLORREF color)
{
CD_BkColor = color;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetBdColor(COLORREF lightcolor, COLORREF darkcolor)
//输入参数:lightcolor是仪表边框的亮部颜色,darkcolor是其暗部颜色
//返回值:无
//作用:设置仪表的边框颜色
void CurveDevice::CD_SetBdColor(COLORREF lightcolor, COLORREF darkcolor)
{
CD_BdLightColor = lightcolor;
CD_BdDarkColor = darkcolor;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetAxleColor(COLORREF color)
//输入参数:坐标轴的颜色
//返回值:无
//作用:设置仪表坐标轴的颜色
void CurveDevice::CD_SetAxleColor(COLORREF color)
{
CD_AxleColor = color;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetGridColor(COLORREF color)
//输入参数:背景网格的颜色
//返回值:无
//作用:设置仪表背景网格的颜色
void CurveDevice::CD_SetGridColor(COLORREF color)
{
CD_GridColor = color;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetCurveColor(COLORREF color)
//输入参数:曲线的颜色
//返回值:无
//作用:设置要显示的曲线的颜色
void CurveDevice::CD_SetCurveColor(COLORREF color)
{
CD_CurveColor = color;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetMaxNumber(double number)
//输入参数:仪表能显示的最大数值
//返回值:无
//作用:设置仪表能显示的最大数值(量程)
void CurveDevice::CD_SetMaxNumber(double number)
{
CD_MaxNumber = number;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetPlaceMode(UINT mode)
//输入参数:仪表的放置方式常量,可以是CD_HORIZONTAL(水平)或者CD_VERTICAL(垂直)
//返回值:无
//作用:设置仪表的放置方式(水平或者垂直)
void CurveDevice::CD_SetPlaceMode(UINT mode)
{
CD_PlaceMode = mode;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetWorkMode(UINT mode)
//输入参数:仪表的工作方式常量,可以是CD_REALTIME(实时曲线)或者CD_STATIC(静态曲线)
//返回值:无
//作用:设置仪表的工作方式(实时曲线方式或者静态曲线方式)
void CurveDevice::CD_SetWorkMode(UINT mode)
{
if(mode == CD_REALTIME || mode == CD_STATIC)
CD_WorkMode = mode;
}
/////////////////////////////////////////////////////////////////////////////////////////
//函数名:CD_SetCurrentNumber(double number)
//输入参数:当前要显示的数值
//返回值:无
//作用:设置仪表的当前要显示的数值
void CurveDevice::CD_SetCurrentNumber(double number)
{
if(CD_WorkMode == CD_REALTIME) //实时曲线模式
CD_CurrentNumber = number;
else if(CD_WorkMode == CD_STATIC) //静态曲线模式
{
int rec = (int)(CD_AxleLength * number / CD_MaxNumber);
CD_Record[CD_RecordStartPos] = rec; //插入记录
CD_RecordStartPos ++; //记录起始指针移动
if(CD_RecordStartPos == CD_RecordLength) //如果记录满了,从记录首部开始记录
CD_RecordStartPos = 0;
DrawFace();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -