(1)简单画刷
1
2 3 4 5 6 7 8 9 |
//创建一个红色画刷 CBrush brush(RGB( 255, 0, 0)); //创建并获得设备描述表 CClientDC dc( this); //利用红色画刷填充鼠标拖拽过程中形成的区域 dc.FillRect(CRect(m_CPoint, point), &brush); |
CRect( int l, int t, int r, int b );
CRect( const RECT& srcRect );
CRect( LPCRECT lpSrcRect );
CRect( POINT point, SIZE size );
throw( CResourceException );
pBitmap
BOOL LoadBitmap( UINT nIDResource );
Return Value
Nonzero if successful; otherwise 0.
Parameters
lpszResourceName
Points to a null-terminated string that contains the name of the bitmap resource.
nIDResource
Specifies the resource ID number of the bitmap resource.
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//创建位图对象 CBitmap bitmap; //加载位图资源 bitmap.LoadBitmap(IDB_BITMAP1); //创建位图画刷 CBrush brush(&bitmap); //创建并获得设备描述表 CClientDC dc( this); //利用红色画刷填充鼠标拖拽过程中形成的区域 dc.FillRect(CRect(m_CPoint, point), &brush); |
1
2 3 4 5 |
//创建并获得设备描述表 CClientDC dc( this); //绘制一个矩形 dc.Rectangle(CRect(m_CPoint, point)); |
BOOL Rectangle( int x1, int y1, int x2, int y2 );
BOOL Rectangle( LPCRECT lpRect );
Return Value
Nonzero if the function is successful; otherwise 0.
Parameters
x1
Specifies the x-coordinate of the upper-left corner of the rectangle (in logical units).
y1
Specifies the y-coordinate of the upper-left corner of the rectangle (in logical units).
x2
Specifies the x-coordinate of the lower-right corner of the rectangle (in logical units).
y2
Specifies the y-coordinate of the lower-right corner of the rectangle (in logical units).
lpRect
Specifies the rectangle in logical units. You can pass either a CRect object or a pointer to a RECT structure for this parameter
The GetStockObject function retrieves a handle to one of the stock pens, brushes, fonts, or palettes.
HGDIOBJ GetStockObject( int fnObject // stock object type
利用GetStockObject函数获取的是一个画刷句柄,而我们在进行绘制操作时需要的是一个画刷对象,这里要用到FromHandle函数来实现功能
static CBrush* PASCAL FromHandle( HBRUSH hBrush ); Return Value A pointer to a CBrush object if successful; otherwise NULL. Parameters
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
//创建并获取设备描述表 CClientDC dc( this); //创建一个空画刷 CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //将空画刷选入设备描述表 CBrush *pOldBrush = dc.SelectObject(pBrush); //绘制一个矩形 dc.Rectangle(CRect(m_CPoint, point)); //恢复先前的画刷 dc.SelectObject(pOldBrush); |
- FromHandle函数的调用方式,这个调用类的静态成员函数的方式
- 由于GetStockObject函数返回的类型是HGDIOBJECT,需要进行一个强制类型转换,将其转换为HBRUSH类型
- 这里创建的平Brush变量本身就是一个指针类型,因此在调用SelectObject函数时,该变量前面不用再加上取地址符。
- 另外比较一个FillRect函数和Rectangle函数,首先二者都能绘制矩形,但前者在参数中提供了绘制使用的画刷,因此他就直接利用此画刷来填充矩形,并不需要先把需要的画刷选入设备描述表中,而后者并没有提供画刷这个参数,因此先要把需要的画刷选入设备描述表中,然后再调用此函数来绘制矩形。
1
2 3 4 5 6 7 8 9 10 11 12 |
//获得DC CClientDC dc( this); if (m_bDraw == TRUE) { //画线 dc.MoveTo(m_CPoint); dc.LineTo(point); //修改线段的起点 m_CPoint = point; } |
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//获得DC CClientDC dc( this); //创建一个红色的宽度为1的实线画笔 CPen pen(PS_SOLID, 5, RGB( 255, 175, 0)); //把创建的画笔选入设备描述表 CPen *OldPen = dc.SelectObject(&pen); if (m_bDraw == TRUE) { //画线 dc.MoveTo(m_CPoint); dc.LineTo(point); //修改线段的起点 m_CPoint = point; } //恢复设备描述表 dc.SelectObject(OldPen); |