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

📄 ew_vxworksdrawinterface.cpp

📁 基于Windml2.0的窗口系统原代码 , 以及和MFC CDC兼容的CDC
💻 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 + -