DC/画线/获得窗口指针/画刷/位图

来源:互联网 发布:知乎删除自己的提问 编辑:程序博客网 时间:2024/05/01 22:04

第一部分——画线

第一种方法:

HDC声明一个句柄。

GetDC(m_hWnd)返回一个指向m_hWnd句柄的窗口的设备描述表。

MoveToEx和LineTo是两个GDI(图形调和接口——基于类的API)函数。

GetDC()必须和ReleaseDC一起使用,因为Windows中,设备资源是共享的,一个应用程序使用设备后必须释放它。

第二种方法:

CDC(DC类)声明一个DC对象 CDC*声明一个指向DC对象的指针(例如pDC)。

*pDC有两个方法 MoveTo和LineTo。

使用后要ReleaseDC()函数的形参是指针类型的,这就是为什么一开始CDC不声明对象而是对象指针的原因。

第三种方法:(比较方便)

CClientDC类,这个类的构造函数(形参是指向窗口的指针)获取DC,析构释放。

同样有MoveTo和LineTo这两个方法

后面的部分讲在客户区以外的区域中画线

PS:这部分介绍了怎么得到父类窗口的指针,用GetParent()函数得到返回值;

用CClientDC dc(GetParent())得到的DC是客户区

第四种方法:

CClientDC改成CWindowDC()可以得到窗口的DC;

CWindow dc(GetParent())得到主窗口包括标题栏的DC。

注意:工具栏是客户区

第二部分——修改画笔样式

要修改设备描述表中的画笔样式,必须1、新建一个画笔。2、修改它的样式。3、将它选进DC。

这里要用到SelectObject这个函数;

第三部分——使用画刷

画刷用来填充一个区域,在画一个矩形的时候,新建的画刷不需要被选进DC,因为fillrect函数的第二个参数就是一个指向画刷的指针。

第四部分——位图画刷

这里要注意,位图不能直接填充,而是要把位图加载到画刷中去

用CBitmap类声明一个位图对象,这个对象用LoadBitmap(IDB_BITMAP)将它本身和IDB_BITMAP联系起来。

CBrush类的对象有一个构造函数可以以CBitmap*做参数。

透明画刷

这里用到CDC类的Rectangle函数,上面的Rect方法填充一个区域,这个Rectangle是一个矩形边框(默认填充白色画刷)。但是我们想画一个内部透明的边框,我们可以把透明画刷选进去。

1、用CDC的SelectObject,它的参数是一个对象指针;

2、GetStockObject这个方法,当参数是NULL_BRUSH时可以生成一个空画刷的句柄,类型是HGDIOBJ。

3、FromHandle是一个专门用来把句柄转换为pObject的函数,很多类都有这个方法。比如CBrush类的FromHandle可以把一个HBRUSH转换为pBrush;

用3,可以把1和2结合起来用  就实现

CBrush *pbrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

SetROP2函数用来设置绘图模式。

原创粉丝点击