VC++绘图编程----怎样绘图


一般遵循以下步骤;

(1)定义DC并创建DC

(2)定义并创建GDI对象

(3)调用dc对象的selectobject将GDI对象选入DC中

(4)调用DC对象中的各个函数进行绘图

(5)恢复系统原有的GDI对象----该对象是由selectobject返回值。

(6)释放GDI对象占用的系统资源-》通过GDI对象的DeleteObject函数释放

例如在OnPaint消息响应函数中:


void CMyDrawDlg::OnPaint()
{

CPaintDC dc(this); (1)定义DC并创建DC
 
 // TODO: Add your message handler code here
   
CPen newPen(PS_SOLID,1,RGB(255,0,0));(2)定义并创建GDI对象
CPen *oldPen=dc.SelectObject(&newPen);(3)调用dc对象的selectobject将GDI对象选入DC中

//(4)调用DC对象中的各个函数进行绘图

dc.LineTo(20,20); //画线

dc.Ellipse(200,23,450,234);// 画椭圆
dc.SelectObject(oldPen);(5)恢复系统原有的GDI对象----该对象是由selectobject返回值。
newPen.DeleteObject();(6)释放GDI对象占用的系统资源-》通过GDI对象的DeleteObject函数释放
   
}

 

 

怎样画位图:还是六个步骤

void CMyDrawDlg::OnPaint()
{CPaintDC dc(this); // 
 
 
   CDC memDC;
   memDC.CreateCompatibleDC(&dc);//创建内存兼容的DC
   CBitmap bitmap;
   bitmap.LoadBitmap(IDB_BITMAP1);
   CBitmap *pOld=memDC.SelectObject(&bitmap);
  //(4)调用DC对象中的各个函数进行绘图
   dc.BitBlt(0,0,200,200,&memDC,0,0,SRCCOPY);//方式一
   dc.StretchBlt(210,210,200,200,&memDC,0,0,200,200,SRCCOPY);//方式二


   dc.SelectObject(pOld);
   bitmap.DeleteObject();
   
}

void CMyDrawDlg::OnPaint()//下面这个是演示将位图画到指定的Picture控件中去

{
    CPaintDC dc(this); // device context for painting
    CStatic *pStaic = (CStatic*)GetDlgItem(IDC_PHOTO);//获取资源ID=IDC_PHOTO控件指针,蓝颜色代码,就是关键
    CBitmap bmp;                           
    bmp.Attach(m_hPhotoBitmap);    
    BITMAP bm;                              
    bmp.GetBitmap(&bm);                        
    CDC dcMem;
    dcMem.CreateCompatibleDC(GetDC());       
    CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(bmp);
    CRect lRect;                           
    pStaic->GetClientRect(&lRect);           
    lRect.NormalizeRect();
    pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),
        &dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);

    dcMem.SelectObject(&poldBitmap);
}

 

 补充知识:

http://blog.csdn.net/zhangyulin54321/article/details/8098484

你可能感兴趣的:(编程,vc++)