📄 hcontrol.cpp
字号:
hBrush = CreateSolidBrush(temp_color);//
hOldBrush = (HBRUSH )SelectObject(device,hBrush);
Rectangle(device, FD_Origin.x - FD_FrameRadius + i, FD_Origin.y + 1, FD_Origin.x + FD_FrameRadius - i, FD_Origin.y - FD_PipeLength - 1);
SelectObject(device,hOldBrush);
DeleteObject(hBrush);
}
//绘制框架外表面
r = (int)(0.9 * FD_FrameRadius);
OleTranslateColor(FD_FrameFrontColor,NULL,&temp_color);
// temp_color = GetNextColor(FD_FrameFrontColor, - r * 15);
temp_color = GetNextColor(temp_color, - r * 15);
for(i = 0; i < r; i ++)//r
{
temp_color = GetNextColor(temp_color, 15);
hBrush = CreateSolidBrush(temp_color);
hOldBrush = (HBRUSH )SelectObject(device,hBrush);
Rectangle(device, FD_Origin.x - FD_FrameRadius + i, FD_Origin.y, FD_Origin.x + FD_FrameRadius - i, FD_Origin.y + FD_FrameLength);
Rectangle(device, FD_Origin.x - FD_FrameRadius + i, FD_Origin.y - FD_PipeLength, FD_Origin.x + FD_FrameRadius - i, FD_Origin.y - FD_FrameLength - FD_PipeLength);
SelectObject(device,hOldBrush);
DeleteObject(hBrush);
}
//绘制油筒内的液体
double ratio = ((double)m_s_v2/ (double)m_max_v);
if(ratio >= FD_HighLevelRatio)
temp_color = FD_HighLevelColor;
else if(ratio >= FD_MiddleLevelRatio)
temp_color = FD_MiddleLevelColor;
else
temp_color = FD_LowLevelColor;
r = (int)(0.8 * FD_PipeRadius);
temp_color = GetNextColor(temp_color, -r * 15);
for(i = 0; i < r; i ++)//r
{
temp_color = GetNextColor(temp_color, 15);
hBrush = CreateSolidBrush(temp_color);
hOldBrush = (HBRUSH )SelectObject(device,hBrush);
Rectangle(device, FD_Origin.x - FD_PipeRadius + i, FD_Origin.y, FD_Origin.x + FD_PipeRadius - i, FD_Origin.y - (int)(FD_PipeLength * ratio));
SelectObject(device,hOldBrush);
DeleteObject(hBrush);
}
//绘制大刻度线(并标注文字)
hPen = CreatePen(PS_SOLID, 1, FD_GridColor);
hOldPen = (HPEN)SelectObject(device,hPen);
CString text;
int mode = SetBkMode(device,TRANSPARENT);
hOldFont = (HFONT)SelectObject(device,hFont);
OleTranslateColor(FD_TextColor,NULL,&temp_color);
SetTextColor(device,temp_color);
for(i = 1; i <= (int)FD_BigGridNum; i ++)
{
MoveToEx(device,FD_Origin.x + FD_GridXOffset, FD_Origin.y - i * FD_PipeLength / FD_BigGridNum,&point);
LineTo(device, FD_Origin.x + FD_GridXOffset + FD_BigGridLength, FD_Origin.y - i * FD_PipeLength / FD_BigGridNum);
text.Format("%d", (int)(i * m_max_v / FD_BigGridNum));//FD_MaxFlux
TextOut(device, FD_Origin.x + FD_TextOffset.x +FD_FrameRadius, FD_Origin.y - i * FD_PipeLength / FD_BigGridNum + FD_TextOffset.y, text,text.GetLength());
}
SelectObject(device,hOldPen);
DeleteObject(hPen);
SetBkMode(device,mode);
SelectObject(device,hOldFont);
DeleteObject(hFont);
//绘制小刻度线
hPen = CreatePen(PS_SOLID, 1, FD_GridColor);
hOldPen = (HPEN )SelectObject(device,hPen);
for(i = 1; i <= (int)FD_SmallGridNum; i ++)
{
MoveToEx(device, FD_Origin.x + FD_GridXOffset, FD_Origin.y - i * FD_PipeLength / FD_SmallGridNum,&point);
LineTo(device, FD_Origin.x + FD_GridXOffset + FD_SmallGridLength, FD_Origin.y - i * FD_PipeLength / FD_SmallGridNum);
}
SelectObject(device,hOldPen);
DeleteObject(hPen);
//--------------------------------------------------------------- 字体处理的范例 FD_FontSize
hFont = CreateFont(FD_FontSize, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, DRAFT_QUALITY, VARIABLE_PITCH | FF_SWISS, _T("Arial")); //创建一个默认的字体
//绘制仪表的背景色
OleTranslateColor(FD_BkColor,NULL,&temp_color);
hBrush = CreateSolidBrush(temp_color);//
hOldBrush = (HBRUSH )SelectObject(device,hBrush);
Rectangle(device,r3.left,r3.top,r3.right,r3.bottom); //背景色,灰色
SelectObject(device,hOldBrush);
DeleteObject(hBrush);
FD_Width = r3.right-r3.left; //仪表的默认尺寸,高度和宽度和
FD_Height = r3.bottom-r3.top; //做到和矩形框完全一致
FD_FrameLength = FD_Height/20; //油管两头框架的长度
FD_FrameRadius = FD_Width/6; //默认的框架半径
FD_PipeLength = FD_Height - 2*FD_FrameLength; //等与总高度-油管两头框架的长度
FD_PipeRadius = FD_Width/7; //默认的油管半径
FD_Origin.x = r3.left +FD_Width/6; //仪表的内部坐标系原点
FD_Origin.y = r3.bottom - FD_FrameLength;
FD_BigGridLength = FD_FrameRadius/2;
FD_SmallGridLength = FD_BigGridLength/2;
//绘制框架内表面
OleTranslateColor(FD_FrameBackColor,NULL,&temp_color);
r = (int)(0.8 * FD_FrameRadius);
for(i = 0; i < r; i ++)
{
temp_color = GetNextColor(temp_color, 0.8);
hBrush = CreateSolidBrush(temp_color);
hOldBrush = (HBRUSH )SelectObject(device,hBrush);
Rectangle(device, FD_Origin.x - FD_FrameRadius + i, FD_Origin.y + 1, FD_Origin.x + FD_FrameRadius - i, FD_Origin.y - FD_PipeLength - 1);
SelectObject(device,hOldBrush);
DeleteObject(hBrush);
}
//绘制框架外表面
r = (int)(0.9 * FD_FrameRadius);
temp_color = GetNextColor(FD_FrameFrontColor, - r * 15);
for(i = 0; i < r; i ++)
{
temp_color = GetNextColor(temp_color, 15);
hBrush = CreateSolidBrush(temp_color);
hOldBrush = (HBRUSH )SelectObject(device,hBrush);
Rectangle(device, FD_Origin.x - FD_FrameRadius + i, FD_Origin.y, FD_Origin.x + FD_FrameRadius - i, FD_Origin.y + FD_FrameLength);
Rectangle(device, FD_Origin.x - FD_FrameRadius + i, FD_Origin.y - FD_PipeLength, FD_Origin.x + FD_FrameRadius - i, FD_Origin.y - FD_FrameLength - FD_PipeLength);
SelectObject(device,hOldBrush);
DeleteObject(hBrush);
}
//绘制油筒内的液体
ratio =(double) ((double)m_s_a2 /(double) m_max_a);
if(ratio >= FD_HighLevelRatio)
temp_color = FD_HighLevelColor;
else if(ratio >= FD_MiddleLevelRatio)
temp_color = FD_MiddleLevelColor;
else
temp_color = FD_LowLevelColor;
r = (int)(0.8 * FD_PipeRadius);
temp_color = GetNextColor(temp_color, -r * 15);
for(i = 0; i < r; i ++)
{
temp_color = GetNextColor(temp_color, 15);
hBrush = CreateSolidBrush(temp_color);
hOldBrush = (HBRUSH )SelectObject(device,hBrush);
Rectangle(device, FD_Origin.x - FD_PipeRadius + i, FD_Origin.y, FD_Origin.x + FD_PipeRadius - i, FD_Origin.y - (int)(FD_PipeLength * ratio));
SelectObject(device,hOldBrush);
DeleteObject(hBrush);
}
//绘制大刻度线(并标注文字)
OleTranslateColor(FD_GridColor,NULL,&temp_color);
hPen = CreatePen(PS_SOLID, 1, temp_color);
hOldPen = (HPEN )SelectObject(device,hPen);
// CString text;
mode = SetBkMode(device,TRANSPARENT);
hOldFont = (HFONT )SelectObject(device,hFont);
SetTextColor(device,FD_TextColor);
for(i = 1; i <= (int)FD_BigGridNum; i ++)
{
MoveToEx(device,FD_Origin.x + FD_GridXOffset, FD_Origin.y - i * FD_PipeLength / FD_BigGridNum,&point);
LineTo(device, FD_Origin.x + FD_GridXOffset + FD_BigGridLength, FD_Origin.y - i * FD_PipeLength / FD_BigGridNum);
text.Format("%d", (int)(i * m_max_a / FD_BigGridNum));//FD_MaxFlux
TextOut(device, FD_Origin.x + FD_TextOffset.x +FD_FrameRadius, FD_Origin.y - i * FD_PipeLength / FD_BigGridNum + FD_TextOffset.y, text,text.GetLength());
}
SelectObject(device,hOldFont);
SetBkMode(device,mode);
SelectObject(device,hOldPen);
DeleteObject(hFont);
DeleteObject(hPen);
//绘制小刻度线
OleTranslateColor(FD_GridColor,NULL,&temp_color);
hPen = CreatePen(PS_SOLID, 1, temp_color);
hOldPen = (HPEN )SelectObject(device,hPen);
for(i = 1; i <= (int)FD_SmallGridNum; i ++)
{
MoveToEx(device, FD_Origin.x + FD_GridXOffset, FD_Origin.y - i * FD_PipeLength / FD_SmallGridNum,&point);
LineTo(device, FD_Origin.x + FD_GridXOffset + FD_SmallGridLength, FD_Origin.y - i * FD_PipeLength / FD_SmallGridNum);
}
SelectObject(device,hOldPen);
DeleteObject(hPen);
// CString text;
int height;
height = (r1.bottom - r1.top)/9;
hFont = CreateFont( FD_FontSize+4, 0, 0, 0, FW_NORMAL, 0, 0, 0,GB2312_CHARSET , OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, DRAFT_QUALITY, VARIABLE_PITCH | FF_SWISS, _T("Arial")); //创建一个默认的字体
OleTranslateColor(FD_BkColor,NULL,&temp_color);
hBrush = CreateSolidBrush(temp_color);
hOldBrush = (HBRUSH )SelectObject(device,hBrush);
Rectangle(device, r1.left, r1.top, r1.right, r1.bottom);
SelectObject(device,hOldBrush);
DeleteObject(hBrush);
mode = SetBkMode(device,TRANSPARENT);
hOldFont = (HFONT )SelectObject(device,hFont);
SetTextColor(device,FD_TextColor);
text.Format("一次电压( V): %d", (int)(m_s_v1));
TextOut(device, r1.left, r1.top+2 , text,text.GetLength());
text.Format("一次电流( A): %d", (int)(m_s_a1));
TextOut(device, r1.left , r1.top + height+2, text,text.GetLength());
text.Format("二次电压(kV): %d", (int)(m_s_v2));
TextOut(device, r1.left , r1.top + height*2+2, text,text.GetLength());
text.Format("二次电流(mA): %d", (int)(m_s_a2));
TextOut(device, r1.left, r1.top + height*3+2, text,text.GetLength());
text.Format("导 通 角(度): %d", (int)(m_s_dtj));
TextOut(device, r1.left , r1.top + height*4+2, text,text.GetLength());
text.Format("火 花 率(/M): %d", (int)(m_s_hhl));
TextOut(device, r1.left , r1.top + height*5+2, text,text.GetLength());
text.Format("油 温(℃): %d", (int)(m_s_yw));
TextOut(device, r1.left , r1.top + height*6+2, text,text.GetLength());
text.Format("工作方式: %s", m_str_gzfs);
TextOut(device, r1.left , r1.top + height*7+2, text,text.GetLength());
text.Format("故障报警: %s", m_str_alarm);
TextOut(device, r1.left , r1.top + height*8+2, text,text.GetLength());
SelectObject(device,hOldFont);
DeleteObject(hFont);
if(m_bool_mouse_down == TRUE && m_bool_opl > 2)
{
m_bool_mouse_down = FALSE;
if(point_pos.x>r01.left && point_pos.x<r01.right && point_pos.y> r01.top&&point_pos.y< r01.bottom)
{
m_bool_va = 1; //只是设定伏安测试,设置标志,然后等程序传送
m_bool_active = 1;
Fire_VAPress(m_bool_va);
}
if(point_pos.x>r02.left && point_pos.x<r02.right && point_pos.y> r02.top&&point_pos.y< r02.bottom)
{
if(m_bool_switch == 1)
m_bool_switch = 0;
else
m_bool_switch = 1;
Fire_SwitchPress(m_bool_switch);
}
if(point_pos.x>r03.left && point_pos.x<r03.right && point_pos.y> r03.top&&point_pos.y< r03.bottom)
{
m_bool_view_detail = 1; //要求外界响应后马上就复位该标志
Fire_DetailPress(m_str_name.AllocSysString());
}
if(point_pos.x>r04.left && point_pos.x<r04.right && point_pos.y> r04.top&&point_pos.y< r04.bottom)
{
m_bool_keep = 1;
m_bool_down = 0;
m_bool_cancel = 0;
m_bool_active = 1;
Fire_KeepPress(m_bool_keep);
}
if(point_pos.x>r05.left && point_pos.x<r05.right && point_pos.y> r05.top&&point_pos.y< r05.bottom)
{
m_bool_down = 1;
m_bool_keep = 0;
m_bool_cancel = 0;
m_bool_active = 1;
Fire_DownPress(m_bool_down);
}
if(point_pos.x>r06.left && point_pos.x<r06.right && point_pos.y> r06.top&&point_pos.y< r06.bottom)
{
m_bool_cancel = 1; //要求外界响应后马上就复位该标志
m_bool_keep = 0;
m_bool_down = 0;
m_bool_active = 1;
Fire_CancelPress(m_bool_cancel);
}
//----------------------第七个按键无效故取消
}
LPCTSTR pszText;
SetTextAlign(device, TA_CENTER|TA_BASELINE);
HFONT hFD_Font, *pfontold;
//--------------------------------------------------------------- 字体处理的范例
LOGFONT lf;
lf.lfHeight = 12;
lf.lfWeight = FW_NORMAL;
lf.lfCharSet = ANSI_CHARSET;//GB2312_CHARSET;
hFD_Font = CreateFontIndirect(&lf);
// hFD_Font = CreateFont(FD_FontSize, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, DRAFT_QUALITY, VARIABLE_PITCH | FF_SWISS, _T("Arial")); //创建一个默认的字体
pfontold = (HFONT *)SelectObject(device,&hFD_Font);
//-------------------------------------------------------------------------
OleTranslateColor(FD_BkColor,NULL,&temp_color);
if(m_bool_va == 1)
hBrush = CreateSolidBrush(RGB(255,100,255));
else
hBrush = CreateSolidBrush(temp_color);
hOldBrush = (HBRUSH)SelectObject(device, hBrush);
Rectangle(device, r01.left, r01.top, r01.right, r01.bottom);
DeleteObject(hBrush);
pszText = _T("VA");
TextOut(device,(r01.left + r01.right) / 2, (r01.top + r01.bottom) / 2+5, pszText, lstrlen(pszText));
if( m_bool_bt == 0)
{
hBrush = CreateSolidBrush(RGB(192,192,192));
hOldBrush = (HBRUSH)SelectObject(device, hBrush);
pszText = _T("未备妥");
}
else if(m_bool_switch_wrong == 1)
{
hBrush = CreateSolidBrush(RGB(255,255,0));
hOldBrush = (HBRUSH)SelectObject(device, hBrush);
pszText = _T("故障");
}
else if( m_bool_switch == 1)
{
hBrush = CreateSolidBrush(RGB(255,0,0));
hOldBrush = (HBRUSH)SelectObject(device, hBrush);
pszText = _T("开机");
}
else
{
hBrush = CreateSolidBrush(RGB(0,255,0));
hOldBrush = (HBRUSH)SelectObject(device, hBrush);
pszText = _T("停机");
}
Rectangle(device, r02.left, r02.top, r02.right, r02.bottom);
TextOut(device,(r02.left + r02.right) / 2, (r02.top + r02.bottom) / 2+5, pszText, lstrlen(pszText));
DeleteObject(hBrush);
hBrush = CreateSolidBrush(RGB(192,192,255));
hOldBrush = (HBRUSH)SelectObject(device, hBrush);
Rectangle(device, r03.left, r03.top, r03.right, r03.bottom);
DeleteObject(hBrush);
pszText = m_str_name;//_T("明细");
TextOut(device,(r03.left + r03.right) / 2, (r03.top + r03.bottom) / 2+5, pszText, lstrlen(pszText));
if(m_bool_keep == 1)
hBrush = CreateSolidBrush(FD_PressColor);
else
hBrush = CreateSolidBrush(FD_BkColor);
hOldBrush = (HBRUSH)SelectObject(device, hBrush);
Rectangle(device, r04.left, r04.top, r04.right, r04.bottom);
DeleteObject(hBrush);
pszText = _T("中止");
TextOut(device,(r04.left + r04.right) / 2, (r04.top + r04.bottom) / 2+5, pszText, lstrlen(pszText));
if(m_bool_down == 1)
hBrush = CreateSolidBrush(FD_PressColor);
else
hBrush = CreateSolidBrush(FD_BkColor);
hOldBrush = (HBRUSH)SelectObject(device, hBrush);
Rectangle(device, r05.left, r05.top, r05.right, r05.bottom);
DeleteObject(hBrush);
pszText = _T("下移");
TextOut(device,(r05.left + r05.right) / 2, (r05.top + r05.bottom) / 2+5, pszText, lstrlen(pszText));
if(m_bool_cancel == 1)
hBrush = CreateSolidBrush(FD_PressColor);
else
hBrush = CreateSolidBrush(FD_BkColor);
hOldBrush = (HBRUSH)SelectObject(device, hBrush);
Rectangle(device, r06.left, r06.top, r06.right, r06.bottom);
DeleteObject(hBrush);
pszText = _T("取消");
TextOut(device,(r06.left + r06.right) / 2, (r06.top + r06.bottom) / 2+5, pszText, lstrlen(pszText));
if(m_bool_remote == 1)
{
hBrush = CreateSolidBrush(FD_PressColor);
pszText = _T("远控");
}
else
{
hBrush = CreateSolidBrush(FD_BkColor);
pszText = _T("近控");
}
hOldBrush = (HBRUSH)SelectObject(device, hBrush);
Rectangle(device, r07.left, r07.top, r07.right, r07.bottom);
DeleteObject(hBrush);
TextOut(device,(r07.left + r07.right) / 2, (r07.top + r07.bottom) / 2 +5, pszText, lstrlen(pszText));
if( m_bool_active == 1)
hBrush = CreateSolidBrush(RGB(255,0,0));
else
hBrush = CreateSolidBrush(FD_BkColor);
hOldBrush = (HBRUSH)SelectObject(device, hBrush);
Rectangle(device, r08.left, r08.top, r08.right, r08.bottom); //01->
DeleteObject(hBrush);
DeleteObject(hFD_Font);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -