1.对象定义
CBitmap m_BK;//背景图
CPen m_pen;//画笔
CBrush brush;//画刷
CFont font;//字体
BITMAP bmp;//背景图信息
CRect rect;//矩形信息
2.对象初始化
BOOL reb = m_BK.LoadBitmap(IDB_BITMAP1);//加载位图资源
brush.CreateSolidBrush(RGB(169,165,252));//创建带颜色值的画刷
m_pen.CreatePen(PS_NULL,2,RGB(192,192,192));//创建空画笔
font.CreatePointFont(300,L"黑体",NULL); //创建黑体字体,字体大小300
m_BK.GetBitmap(&bmp);
3.使用实例
CPaintDC dc(this);
m_BK.GetBitmap(&bmp);
CDC MemDC;
MemDC.CreateCompatibleDC((CDC*)&dc);
CBitmap* Oldbmp = MemDC.SelectObject(&m_BK); //选入位图
CBrush* Oldbrush = MemDC.SelectObject(&brush); //选入画刷
CPen* Oldpen = MemDC.SelectObject(&m_pen);//选入画笔font
CFont* Oldfont = MemDC.SelectObject(&font);
this->GetClientRect(&rect);
//输出标题
OutTitle(&MemDC);
//画报表
DrawLine(&MemDC);
//画报表上面的矩形
DrawRect(&MemDC);
//画圆形报表
DrawYuan(&MemDC);
//从内存拷贝图片到当前DC
dc.BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
//销毁对象
MemDC.SelectObject(Oldbmp);
MemDC.SelectObject(Oldbrush);
MemDC.SelectObject(Oldpen);
MemDC.SelectObject(Oldfont);
MemDC.DeleteDC();
void CgdiDemoDlg::OutTitle(CDC* MemDC)
{
//画矩形
CRect m_rc(0,20,bmp.bmWidth,bmp.bmHeight);
MemDC->Rectangle(0,0,bmp.bmWidth,bmp.bmHeight);
//输出文字
MemDC->SetBkMode(1);
MemDC->DrawText(L"案例数据统计报表",m_rc,DT_CENTER);
}
void CgdiDemoDlg::DrawLine(CDC* MemDC)
{
Graphics gdi(MemDC->m_hDC);
//竖线
Pen pen(Color(255,0,0,0),1.0f);
gdi.DrawLine(&pen,60,100,60,300);
gdi.DrawLine(&pen,90,100,90,300);
gdi.DrawLine(&pen,120,100,120,300);
gdi.DrawLine(&pen,150,100,150,300);
gdi.DrawLine(&pen,180,100,180,300);
gdi.DrawLine(&pen,210,100,210,300);
gdi.DrawLine(&pen,240,100,240,300);
//横线
gdi.DrawLine(&pen,60,120,260,120);
gdi.DrawLine(&pen,60,150,260,150);
gdi.DrawLine(&pen,60,180,260,180);
gdi.DrawLine(&pen,60,210,260,210);
gdi.DrawLine(&pen,60,240,260,240);
gdi.DrawLine(&pen,60,270,260,270);
gdi.DrawLine(&pen,60,300,260,300);
CFont m_font;
m_font.CreatePointFont(100,L"宋体",NULL);
CFont* Oldfont2 = MemDC->SelectObject(&m_font);
MemDC->TextOut(20,113,L"6000");
MemDC->TextOut(20,143,L"5000");
MemDC->TextOut(20,173,L"4000");
MemDC->TextOut(20,203,L"3000");
MemDC->TextOut(20,233,L"2000");
MemDC->TextOut(20,263,L"1000");
MemDC->TextOut(41,308,L"0");
MemDC->TextOut(83,308,L"1月");
MemDC->TextOut(113,308,L"2月");
MemDC->TextOut(143,308,L"3月");
MemDC->TextOut(173,308,L"4月");
MemDC->TextOut(203,308,L"5月");
MemDC->TextOut(233,308,L"6月");
MemDC->SelectObject(Oldfont2);
}
void CgdiDemoDlg::DrawRect(CDC* MemDC)
{
CBrush m_brush;
m_brush.CreateSolidBrush(RGB(255,255,255));
CBrush* Oldbrush2 = MemDC->SelectObject(&m_brush);
MemDC->Rectangle(75,240,105,301);
MemDC->Rectangle(105,210,135,301);
MemDC->Rectangle(135,240,165,301);
MemDC->Rectangle(165,120,195,301);
MemDC->Rectangle(195,180,225,301);
MemDC->Rectangle(225,270,255,301);
MemDC->SelectObject(Oldbrush2);
}
void CgdiDemoDlg::DrawYuan(CDC* MemDC)
{
CBrush m_brush1,m_brush2;
m_brush1.CreateSolidBrush(RGB(179,227,255));
m_brush2.CreateSolidBrush(RGB(128,208,255));
CBrush* Oldbrush1 = MemDC->SelectObject(&m_brush1);
MemDC->Ellipse(337,100,477,200);
MemDC->SelectObject(Oldbrush1);
}
效果图: