您的位置:首页 > 其它

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

2011-06-11 22:33 344 查看
第一部分——画线
第一种方法:
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函数用来设置绘图模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: