/// <summary> /// 绘制文字 /// </summary> /// <param name="text">文字</param> /// <param name="font">字体</param> /// <param name="color">颜色</param> /// <param name="rect">矩形区域</param> public void DrawText(string text, FONT font, double dwPenColor, RECT rect) { if (dwPenColor == COLOR.Empty()) { return; } if (dwPenColor < 0) { dwPenColor = Math.Abs(dwPenColor); } IntPtr hFont = CreateFont ( font.FontSize, 0, 0, 0, font.Bold ? FW_BOLD : FW_REGULAR, font.Italic ? 1 : 0, font.Underline ? 1 : 0, 0, GB2312_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, font.FontFamily ); RECT newRect = new RECT(rect.left + m_offsetX, rect.top + m_offsetY, rect.right + m_offsetX, rect.bottom + m_offsetY); SetBkMode(m_hDC, TRANSPARENT); SetTextColor(m_hDC, (int)dwPenColor); IntPtr hOldFont = SelectObject(m_hDC, hFont); DrawText(m_hDC, text, -1, ref newRect, 0 | DT_NOPREFIX); SelectObject(m_hDC, hOldFont); DeleteObject(hFont); }
/// <summary> /// 绘制文字 /// </summary> /// <param name="text">文字</param> /// <param name="font">字体</param> /// <param name="color">颜色</param> /// <param name="mp">坐标</param> public void DrawText(string text, FONT font, double dwPenColor, POINT mp) { if (dwPenColor == COLOR.Empty()) { return; } if (dwPenColor < 0) { dwPenColor = Math.Abs(dwPenColor); } IntPtr hFont = CreateFont ( font.FontSize, 0, 0, 0, font.Bold ? FW_BOLD : FW_REGULAR, 0, 0, 0, GB2312_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, font.FontFamily ); SIZE size = TextSize(text, font); RECT newRect = new RECT(mp.x + m_offsetX, mp.y + m_offsetY, mp.x + m_offsetX + size.cx, mp.y + m_offsetY + size.cy); SetBkMode(m_hDC, TRANSPARENT); SetTextColor(m_hDC, (int)dwPenColor); IntPtr hOldFont = SelectObject(m_hDC, hFont); DrawText(m_hDC, text, -1, ref newRect, 0 | DT_NOPREFIX); SelectObject(m_hDC, hOldFont); DeleteObject(hFont); }
/// <summary> /// 绘制直线 /// </summary> /// <param name="color">颜色</param> /// <param name="width">宽度</param> /// <param name="lineStyle">样式</param> /// <param name="x1">第一个点的横坐标</param> /// <param name="y1">第一个点的纵坐标</param> /// <param name="x2">第二个点的横坐标</param> /// <param name="y2">第二个点的纵坐标</param> public void DrawLine(double dwPenColor, int width, int style, int x1, int y1, int x2, int y2) { if (dwPenColor == COLOR.Empty()) { return; } m_g.DrawLine(MCommon.Instance.GetPen(dwPenColor, width, style), x1 + m_offsetX, y1 + m_offsetY, x2 + m_offsetX, y2 + m_offsetY); }
/// <summary> /// 绘制矩形 /// </summary> /// <param name="color">颜色</param> /// <param name="lineWidth">宽度</param> /// <param name="lineStyle">样式</param> /// <param name="rect">矩形区域</param> public void DrawRect(double dwPenColor, int width, int style, RECT rect) { if (dwPenColor == COLOR.Empty()) { return; } Rectangle gdiPlusRect = new Rectangle(rect.left + m_offsetX, rect.top + m_offsetY, rect.right - rect.left, rect.bottom - rect.top); m_g.DrawRectangle(MCommon.Instance.GetPen(dwPenColor, width, style), gdiPlusRect); }
/// <summary> /// 绘制大量直线 /// </summary> /// <param name="color">颜色</param> /// <param name="lineWidth">宽度</param> /// <param name="dashPattern">样式</param> public void DrawPolyline(double dwPenColor, int width, int style, POINT[] points) { if (dwPenColor == COLOR.Empty()) { return; } Point[] gdiPlusPoints = new Point[points.Length]; for (int i = 0; i < gdiPlusPoints.Length; i++) { Point p = new Point(points[i].x + m_offsetX, points[i].y + m_offsetY); gdiPlusPoints[i] = p; } m_g.DrawLines(MCommon.Instance.GetPen(dwPenColor, width, style), gdiPlusPoints); }
/// <summary> /// 填充椭圆 /// </summary> /// <param name="color">颜色</param> /// <param name="left">左侧坐标</param> /// <param name="top">顶部左标</param> /// <param name="right">右侧坐标</param> /// <param name="bottom">底部坐标</param> public void FillEllipse(double dwPenColor, int left, int top, int right, int bottom) { if (dwPenColor == COLOR.Empty()) { return; } if (dwPenColor < 0) { dwPenColor = Math.Abs(dwPenColor); } IntPtr brush = CreateSolidBrush((int)dwPenColor); SelectObject(m_hDC, brush); Ellipse(m_hDC, left + m_offsetX, top + m_offsetY, right + m_offsetX, bottom + m_offsetY); DeleteObject(brush); }
/// <summary> /// 填充矩形 /// </summary> /// <param name="color">颜色</param> /// <param name="rect">矩形区域</param> public void FillRect(double dwPenColor, RECT rect) { if (dwPenColor == COLOR.Empty()) { return; } if (dwPenColor < 0) { dwPenColor = Math.Abs(dwPenColor); } RECT newRect = new RECT(rect.left + m_offsetX, rect.top + m_offsetY, rect.right + m_offsetX, rect.bottom + m_offsetY); IntPtr brush = CreateSolidBrush((int)dwPenColor); SelectObject(m_hDC, brush); FillRect(m_hDC, ref newRect, brush); DeleteObject(brush); }
/// <summary> /// 绘制矩形 /// </summary> /// <param name="color">颜色</param> /// <param name="lineWidth">宽度</param> /// <param name="lineStyle">样式</param> /// <param name="left">左侧坐标</param> /// <param name="top">顶部左标</param> /// <param name="right">右侧坐标</param> /// <param name="bottom">底部坐标</param> public void DrawRect(double dwPenColor, int width, int style, int left, int top, int right, int bottom) { if (dwPenColor == COLOR.Empty()) { return; } if (dwPenColor < 0) { dwPenColor = Math.Abs(dwPenColor); } IntPtr hPen = CreatePen(style, width, (int)dwPenColor); IntPtr hOldPen = SelectObject(m_hDC, hPen); SelectObject(m_hDC, GetStockObject(HOLLOW_BRUSH)); Rectangle(m_hDC, left + m_offsetX, top + m_offsetY, right + m_offsetX + 1, bottom + m_offsetY); SelectObject(m_hDC, hOldPen); DeleteObject(hPen); }
/// <summary> /// 绘制直线 /// </summary> /// <param name="color">颜色</param> /// <param name="width">宽度</param> /// <param name="lineStyle">样式</param> /// <param name="x1">第一个点的横坐标</param> /// <param name="y1">第一个点的纵坐标</param> /// <param name="x2">第二个点的横坐标</param> /// <param name="y2">第二个点的纵坐标</param> public void DrawLine(double dwPenColor, int width, int style, int x1, int y1, int x2, int y2) { if (dwPenColor == COLOR.Empty()) { return; } if (dwPenColor < 0) { dwPenColor = Math.Abs(dwPenColor); } IntPtr hPen = CreatePen(style, width, (int)dwPenColor); IntPtr hOldPen = SelectObject(m_hDC, hPen); MoveToEx(m_hDC, x1 + m_offsetX, y1 + m_offsetY, IntPtr.Zero); LineTo(m_hDC, x2 + m_offsetX, y2 + m_offsetY); SelectObject(m_hDC, hOldPen); DeleteObject(hPen); }
/// <summary> /// 填充多边形 /// </summary> /// <param name="color">颜色</param> /// <param name="points">点的数组</param> public void FillPolygon(double dwPenColor, POINT[] points) { if (dwPenColor == COLOR.Empty()) { return; } if (dwPenColor < 0) { dwPenColor = Math.Abs(dwPenColor); } POINT[] newPoints = new POINT[points.Length]; for (int i = 0; i < points.Length; i++) { POINT newPoint = new POINT(points[i].x + m_offsetX, points[i].y + m_offsetY); newPoints[i] = newPoint; } IntPtr brush = CreateSolidBrush((int)dwPenColor); SelectObject(m_hDC, brush); Polygon(m_hDC, newPoints, newPoints.Length); DeleteObject(brush); }
/// <summary> /// 绘制大量直线 /// </summary> /// <param name="color">颜色</param> /// <param name="lineWidth">宽度</param> /// <param name="dashPattern">样式</param> public void DrawPolyline(double dwPenColor, int width, int style, POINT[] points) { if (dwPenColor == COLOR.Empty()) { return; } if (dwPenColor < 0) { dwPenColor = Math.Abs(dwPenColor); } POINT[] newPoints = new POINT[points.Length]; for (int i = 0; i < points.Length; i++) { POINT newPoint = new POINT(points[i].x + m_offsetX, points[i].y + m_offsetY); newPoints[i] = newPoint; } IntPtr hPen = CreatePen(style, width, (int)dwPenColor); IntPtr hOldPen = SelectObject(m_hDC, hPen); Polyline(m_hDC, newPoints, newPoints.Length); SelectObject(m_hDC, hOldPen); DeleteObject(hPen); }