Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2647667
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: C/C++

2007-12-04 15:16:18

所有的绘图操作包括如下几种:利用API、用CDC对象、用CClientDC对象、用CWindowDC对象和CPaintDC;下面分别说明:
利用API来进行绘图操作,首先需要一个设备描述表(DC)句柄HDC,然后才能进行绘图操作,在绘图结束的时候要释放DC,基本操作如下:
HDC hdc=::GetDC(m_hWnd);//GetDC()需要一个指向窗体的句柄作为参数,也就是获得哪个窗体的DC
//下面进行绘图操作,画一条直线
MoveToEx(hdc,0,0,NULL);
LineTo(hdc,100,100);
//释放DC
::ReleaseDC(m_hWnd,hdc);//在这里需要使用全局函数标识符,不然编译会认为是调用了窗体对象的releaseDC()成员函数,从而产生错误
CDC:是其他设备描述表的基类。在这里可以进行所有的操作。CDC在一般情况下需要用当前窗口的CWnd::GetDC()函数进行初始化,即:
CDC *pDC=GetDC();//在任何一个窗口类中均可用该函数来初始化一个CDC类
在该类中,直接可以进行图形的绘制操作
pDC->MoveTo(CPoint(0,0));//如果没有这一句,仍可以画出直线,它将缺省以(0,0)点作为起始点
pDC->LineTo(CPoint(100,100));//如果要连续画直线,则缺省地将终止点作为第二条直线的起始点
pDC->LineTo(CPoint(200,300));//这样的操作也是可行的。
在该操作完成后,需要释放DC:
ReleaseDC(pDC);
CClientDC:作为CDC的一个子类,在构造函数中封装了GetDC()这个函数,因此,只需传递一个窗口对象指针即可,即:
CClientDC dc(this);//获得当前窗口的DC
在CClientDC的析构函数中,封装了ReleaseDC()这个函数,因此,不需要再对其进行释放,
其他的操作跟CDC相同,但它仅在窗口的客户区的范围内有效。
CWindowDC:指向整个窗口的DC,包括了客户区和非客户区(菜单栏等)。作为CDC的一个子类,在构造函数中封装了GetDC()这个函数,因此,只需传递一个窗口对象指针即可,即:
CWindowDC dc(this);//获得当前窗口的DC
如果要在桌面上进行操作,可以用指向指点的指针来获得桌面的上下文描述表,即:
CWindowDC dc(GetDeskTopWindow());
在CWindowDC的析构函数中,封装了ReleaseDC()这个函数,因此,不需要再对其进行释放,
其他的操作跟CDC相同,但它仅在窗口的客户区的范围内有效。
CPaintDC:主要是对打印输出进行操作,以后再补充
除了上述利用DC进行基本操作外,在大多数情况下,我们可能需要对绘制的图形添加不同的属性,如字体、颜色、线型、填充性等。这样就要利用到一些GDI对象进行操作了。下面简单说明:
1、CPen类,设置画笔的颜色,线型,线宽等
CPen pen(PS_SOLID,1,RGB(255,0,0));//利用CPen的构造函数,我们可以直接初始化一个对象,第一个参数表示线型,第二个参数为线宽,第三个参数为颜色,其中第三个参数为COLORREF类型,可以用宏RGB来构造。RGB(0,0,0)显示为黑色,RGB(255,0,0)显示为红色,RGB(0,255,0)显示为绿色,RGB(0,0,255)显示了蓝色,RGB(255,255,255)显示为白色。
在画线或者画其他几何形状时,需要将其选入到设备描述表中(下面所有GDI对象也需要进行相同的操作),即:
CClientDC dc(this);
CPen *oldPen=dc.SelectObject(&pen);//返回设备描述表中原来的笔类型,等进行操作完后将其选回设备描述表
……
dc.SelectObject(oldPen);//恢复原来的设置
2、CBrush类,设置画刷的填充类型、颜色或者位图

HDC设备环境句柄  
CDC   mfc包装的设备环境的基类  
CClientDC客户区的设备环境类
CPaintDC是从CDC派生出来的。在构造时自动调用CWnd::BeginPaint,析构时调用CWnd::EndPaint。
通常CPaintDC用来响应WM_PAINT消息。一般应用在OnPaint函数.  
  CClientDC也是从CDC派生出来的.构造时自动调用GetDC函数,析构时自动调用  
  ReleaseDC函数.一般应用于客户区窗口的绘制.
阅读(3125) | 评论(1) | 转发(0) |
0

上一篇:关于CBitmap的使用

下一篇:php array数组

给主人留下些什么吧!~~

chinaunix网友2010-03-11 16:44:05

比bitblt和stretchblt效率更高的函数:http://book.77169.com/70/34694.htm