VC++ GDI畫立體管道

都是以前的一些代碼,今天回頭整理的時候,看到一些有些用的東西。在做SCADA的時候,所涉及的繪製對象,有立體管道。下面的代碼,就是使用GDI來繪製3D立體管道的。下面是核心代碼(略顯冗餘),如果使用,稍作修改即可。

void Draw(CDC *PDC)
{
    int pointNum = m_PointArray.GetSize();
    //Draw figure
    CPoint* tmpPoint= (CPoint*) new CPoint[pointNum];
    CSize tmpSize(m_nOrgX, m_nOrgY);
    for(int Index = 0; Index < pointNum; Index++)
       tmpPoint[Index] = m_PointArray[Index] + tmpSize;      

    COLORREF C1 = RGB(1, 69, 142); //m_LineColor

    COLORREF C2 = RGB(255, 255, 255); //m_BrushColor

    float f;
    int i, count = 5;
    count += m_LineWidth;//增加線寬,從而設置管道的粗細
    CPen pen, *pOldPen;
    for (i=count; i>0; i--)
    {
        f = float(i) / count;//設置顏色漸變的比例因子
        BYTE  bR =  (BYTE)(GetRValue(C1) * f + GetRValue(C2) * (1 - f));
        BYTE  bG =  (BYTE)(GetGValue(C1) * f + GetGValue(C2) * (1 - f));
        BYTE  bB =  (BYTE)(GetBValue(C1) * f + GetBValue(C2) * (1 - f));
         pen.CreatePen(PS_SOLID, i, RGB(bR, bG, bB)); // 創建畫筆        
        pOldPen = PDC-&gt;SelectObject(&pen);
        PDC-&gt;Polyline(tmpPoint,pointNum);        
        pen.DeleteObject();                // 釋放GDI資源
    }

    //Remove pen/brush
    PDC-&gt;SelectObject(pOldPen);
    delete[] tmpPoint;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章