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

📄 hcontrol.cpp

📁 控件形式的DLL
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			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 + -