6.MFC:GDI绘图(1)

GDI:我们很容易清楚,图形设备接口(Graphics Device Interface),就跟API一样。它不只是在windows应用程序的界面开发中被使用,就连windows本身也是使用GDI来实现的。窗口的标题栏,客户区以及按钮和列表等等都是由GDI绘制的,我们之前学习的控件都是经过了加工之后的成品,方便我们使用。如果想要把自己心中的控件和窗口画出来就要学会这门GDI。现如今,每个应用程序的窗口,控件都是他们团队自己设计的,利用现成的控件类,窗口类开发的APP很少,QQ,360,WPS等这些软件的窗口和控件都是自定义控件,只有这样才能让图形绚丽多彩,更加美观。

DC 我们称之为设备上下文,或者设备环境。早期开发图形程序都是直接针对具体设备进行的,要开发一个图形软件必须先了解什么型号的显示卡或者打印机,根据每个厂家提供不同的接口编写不同的代码来开发。进入windows时代,操作系统通过对驱动程序的统一管理,将设备接口细节隐藏于操作系统内部。程序员在编写图形程序时,只要调用一个公用的虚拟设备即可,这个虚拟设备环境也就是DC。

HDC,设备环境句柄就是专门用于绘图操作的句柄,CDC则是对应的类。就像HWND和CWnd一样。
通过HDC句柄绘图有三种方式,即标准客户区绘图,临时客户区绘图,全窗口绘图。为此分别有三个相应的类:CPaintDC,CClientDC,
CWindowDC。
CPaintDC:标准客户区绘图,窗口刷新时不消失,在WM_PAINT消息下使用。
CWindowDC:全窗口绘图,窗口刷新时不消失,在WM_NCPAINT消息下使用。
CClientDC:临时客户区绘图,窗口刷新就消失,在任何时候都可使用。

在获取设备环境后,就可以对其绘画,绘画工具有笔,画刷,位图,区域

CPaintDC dc(this);
CRect rect;
GetClientRect(rect);
dc.ellipse(rect);
//dc.rectangle(rect);//一个区域内重复画会覆盖本rect以前的画
//dc.roundrect(rect, cpoint(50, 40));
cstring text;
//dc.fillsolidrect(rect,rgb(100,0,100));
dc.setbkmode(transparent);
text.format(l"%d,%d,%d,%d", rect.top, rect.left, rect.right, rect.bottom);
dc.drawtext(text, rect1,cp_utf8);

    cpen p(ps_dot, 4, rgb(255, 0, 0));
	cpen *oldp=dc.selectobject(&p);

	dc.rectangle(rect);
	cbrush b(rgb(0, 0, 255));
	cbrush* oldb=dc.selectobject(&b);
	dc.ellipse(rect);
	dc.selectobject(oldb);
	dc.selectobject(oldp);
	dc.roundrect(rect, cpoint(50, 40));
	
	cbitmap map;
	map.loadbitmapw(IDB_BITMAP1);
	cbrush b1(&map);
	dc.selectobject(&b1);
	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值