📄 ew_vxworksdrawinterface.cpp
字号:
#include "EW_VxworksDrawInterface.h"
EW_VxworksDrawInterface::EW_VxworksDrawInterface(int nScreenWidth , int nScreenHeight)
{
m_pDC = new CDC();
//创建一个屏幕大小的缓冲区
m_nScreenWidth = nScreenWidth;
m_nScreenHeight = nScreenHeight;
// m_pMemDC = m_pDC;
m_pMemDC = new CDC();
m_pBitmap = new CBitmap();
m_pBitmap->CreateCompatibleBitmap(m_nScreenWidth , m_nScreenHeight);
m_pMemDC->SelectObject(m_pBitmap);
}
EW_VxworksDrawInterface::~EW_VxworksDrawInterface()
{
m_pMemDC->SelectObject((CBitmap *)NULL);
delete m_pMemDC;
delete m_pBitmap;
delete m_pDC;
}
//##ModelId=3F4EDED00326
void EW_VxworksDrawInterface::BeginDraw(const EW_Rect & rect)
{
if (! m_iDrawCount)
{
// 初始无效区
m_Invalid = rect;
m_pMemDC->FillRect(CRect(rect.wLeft , rect.wTop , rect.wRight , rect.wBottom ) , &CBrush(RGB(255 , 255 , 255)));
}
else
{
// 组合无效区
m_Invalid |= rect;
}
m_iDrawCount ++;
}
//##ModelId=3F4EDED003A8
void EW_VxworksDrawInterface::EndDraw()
{
m_iDrawCount --;
if(m_iDrawCount < 0){
m_iDrawCount = 0;
return;
}
if (! m_iDrawCount)
{
// 把缓冲区内容刷新到屏幕上
m_pDC->BitBlt(m_Invalid.wLeft, m_Invalid.wTop, m_Invalid.Width(), m_Invalid.Height(), m_pMemDC,
m_Invalid.wLeft, m_Invalid.wTop, SRCCOPY);
}
}
//##ModelId=3F4EDED003E4
void EW_VxworksDrawInterface::FillRect(const EW_Rect & rect, const COLORREF ForeColor, const COLORREF background)
{
if (m_pMemDC)
{
// 创建绘图所用资源
CPen pen(PS_SOLID, 1, ForeColor);
CBrush brush(background);
CPen *prePen = m_pMemDC->SelectObject(&pen);
CBrush *preBrush = m_pMemDC->SelectObject(&brush);
m_pMemDC->Rectangle(rect.wLeft, rect.wTop, rect.wRight + 1, rect.wBottom + 1);
// 删除绘图资源
m_pMemDC->SelectObject(prePen);
pen.DeleteObject();
m_pMemDC->SelectObject(preBrush);
brush.DeleteObject();
}
}
//##ModelId=3F4EDED10133
void EW_VxworksDrawInterface::Line(const short x1, const short y1, const short x2, const short y2, const COLORREF color)
{
if (m_pMemDC)
{
// 创建绘图所用资源
CPen pen(PS_SOLID, 1, color);
CPen *prePen = m_pMemDC->SelectObject(&pen);
m_pMemDC->MoveTo(x1, y1);
m_pMemDC->LineTo(x2, y2);
// 删除绘图资源
m_pMemDC->SelectObject(prePen);
pen.DeleteObject();
}
}
//##ModelId=3F4EDED1031E
void EW_VxworksDrawInterface::DrawText(const char * Text, const short x, const short y, const COLORREF color)
{
if (m_pMemDC)
{
m_pMemDC->SetTextColor(color);
m_pMemDC->SetBkMode(TRANSPARENT);
m_pMemDC->TextOut(x, y, Text);
}
}
void EW_VxworksDrawInterface::DrawTextW(const char * Text, const short x, const short y, const COLORREF color)
{
if (m_pMemDC)
{
m_pMemDC->SetTextColor(color);
m_pMemDC->SetBkMode(TRANSPARENT);
m_pMemDC->TextOutW(x, y, Text);
}
}
//##ModelId=3F4EDED200DA
WORD EW_VxworksDrawInterface::GetTextWidth(const char * Text)
{
if (m_pMemDC)
{
CSize size = m_pMemDC->GetTextExtent(Text, strlen(Text));
return (WORD)size.cx;
}
else
return 0;
}
//##ModelId=3F4EDED20184
WORD EW_VxworksDrawInterface::GetTextHeight(const char * Text)
{
if (m_pMemDC)
{
CSize size = m_pMemDC->GetTextExtent(Text, strlen(Text));
return (WORD)size.cy;
}
else
return 0;
}
//##ModelId=3F4EDED20239
void EW_VxworksDrawInterface::DrawBitmap(const char * pBmpName, const short x1, const short y1)
{
if (m_pMemDC)
{
CBitmap bitmap;
if(bitmap.LoadBmpFile((char *)pBmpName) != false){
CDC memDC;
memDC.CreateCompatibleDC(m_pMemDC);
CBitmap *preBitmap = memDC.SelectObject(&bitmap);
int bmpWidth , bmpHeight;
bitmap.GetBitmapSize(&bmpWidth , &bmpHeight);
m_pMemDC->BitBlt(x1, y1, x1 + bmpWidth - 1, y1 + bmpHeight - 1, &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(preBitmap);
memDC.DeleteObject();
bitmap.DeleteObject();
}
}
}
//##ModelId=3F6193B201F2
void EW_VxworksDrawInterface::DrawPolyLine(const short n, const EW_Point * vert, const COLORREF color)
{
if (m_pMemDC)
{
// 创建绘图所用资源
CPen pen(PS_SOLID, 1, color);
CPen *prePen = m_pMemDC->SelectObject(&pen);
POINT * lppt = new POINT[n];
for (short i = 0; i < n; i ++)
{
lppt[i].x = vert[i].x;
lppt[i].y = vert[i].y;
}
m_pMemDC->Polyline(lppt, n);
delete [] lppt;
// 删除绘图资源
m_pMemDC->SelectObject(prePen);
pen.DeleteObject();
}
}
//##ModelId=3F6EAC820075
void EW_VxworksDrawInterface::DrawDotRect(const EW_Rect & rect, const COLORREF color)
{
if (m_pMemDC)
{
// 创建绘图所用资源
CPen pen(PS_DASH, 1, color);
CPen *prePen = m_pMemDC->SelectObject(&pen);
m_pMemDC->MoveTo(rect.wLeft , rect.wTop);
m_pMemDC->LineTo(rect.wRight , rect.wTop);
m_pMemDC->LineTo(rect.wRight , rect.wBottom);
m_pMemDC->LineTo(rect.wLeft , rect.wBottom);
m_pMemDC->LineTo(rect.wLeft , rect.wTop);
// 删除绘图资源
m_pMemDC->SelectObject(prePen);
pen.DeleteObject();
}
}
CDC *EW_VxworksDrawInterface::GetDC()
{
return m_pDC;
}
CDC *EW_VxworksDrawInterface::GetMemDC()
{
return m_pMemDC;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -