GDI(GDI+) - 混合编程【实例】

本文详细介绍了如何在C++中利用GDI+库进行报表和图表的绘制,包括背景图、画笔、画刷、字体等对象的初始化与使用,并通过实例展示了如何绘制矩形、直线、圆等基本图形元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

}


效果图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值