DC Windows绘图

Windows绘图方式

1.<wbr><wbr><strong>HDChdc;<br><wbr><wbr><wbr><wbr>hdc = ::GetDC(m_hWnd);<br><wbr><wbr><wbr><wbr>MoveToEx(hdc , m_ptOrigin.x ,m_ptOrigin.y,NULL);<br><wbr><wbr><wbr><wbr>LineTo(hdc,point.x , point.y);<br><wbr><wbr><wbr><wbr>::ReleaseDC(m_hWnd,hdc);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></strong></wbr></wbr>

通过获取hdc来取得devicecontext,GetDC是系统函数,使用过DC以后,要释放DC。

图形对象包括画线的笔,绘图和填充用的画刷,可以复制的位图或者屏幕的卷动,用于可用颜色定义的调色板,还有进行其他操作的区域,绘图的路径等等。一个DC的绘图对象包括:Bitmap、Brush、Palette、Font、Path、Pen、Region。DC的类型包括:显示器、打印机、存储器和数据的索引。DC的通俗解释 以及 SelectObject()& DeleteObject() 在GDI中,DC(Devicecontext)是一个非常重要的概念。在各种资料中,将DC翻译为设备描述表,也有的书将DC翻译为设备上下文。

<wbr></wbr>

2.<wbr><wbr> CDC *pDC=<wbr> GetDC();<br><wbr><wbr><wbr><wbr>pDC-&gt;MoveTo(m_ptOrigin);<br><wbr><wbr><wbr><wbr>pDC-&gt;LineTo(point);<br><wbr><wbr><wbr><wbr>ReleaseDC(pDC);<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

CDC是MFC提供的绘图类,类中定义了很多函数。

The CDC class defines a class of device-context objects.The CDC object provides member functions for working with adevice context, such as a display or printer, as well as membersfor working with a display context associated with the client areaof a window.

<wbr></wbr>

3.<wbr> CClientDC dc(GetParent());<br><wbr><wbr><wbr><wbr>dc.MoveTo(m_ptOrigin.x , m_ptOrigin.y);<br><wbr><wbr><wbr><wbr>dc.LineTo(point);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

The CClientDC class isderived from CDC and takes care of calling the WindowsfunctionsGetDC at construction time andReleaseDC at destructiontime. This means that the device context associated with aCClientDC object is the client area of awindow.

<wbr></wbr>

4.<wbr><wbr><wbr>CWindowDCdc(GetDesktopWindow());<br><wbr><wbr><wbr><wbr>dc.MoveTo(m_ptOrigin);<br><wbr><wbr><wbr><wbr>dc.LineTo(point);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

TheCWindowDCclass is derived fromCDC. It calls the WindowsfunctionsGetWindowDCat construction time andReleaseDCat destructiontime. This means that aCWindowDCobject accesses the entire screenarea of aCWnd(both client and nonclient areas).

GetDesktopWindow();获取桌面句柄。

<wbr></wbr>

5.<wbr><wbr>CPen pen(PS_DASH, 1 , RGB(255,0,0));<br><wbr><wbr><wbr><wbr>CClientDC dc(this);<br><wbr><wbr><wbr><wbr>CPen *pOldPen = dc.SelectObject(&amp;pen);<br><wbr><wbr><wbr><wbr>dc.MoveTo(m_ptOrigin.x , m_ptOrigin.y);<br><wbr><wbr><wbr><wbr>dc.LineTo(point);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>dc.SelectObject(pOldPen);</wbr></wbr></wbr></wbr>

创建一个新类CPen,来设定画笔格式。dc.SelectObject();将一个画笔选入DC。

CDC::SelectObject<wbr></wbr>

CPen* SelectObject( CPen* pPen );

CBrush* SelectObject( CBrush* pBrush );

virtual CFont* SelectObject( CFont* pFont );

CBitmap* SelectObject( CBitmap* pBitmap );

int SelectObject( CRgn* pRgn );

返回值为 设定之前的object的指针类型。

<wbr></wbr>

6.<wbr><wbr><wbr>CBrushbrush(RGB(255,0,0));<br><wbr><wbr><wbr><wbr>CClientDC dc(this);<br><wbr><wbr><wbr><wbr>dc.FillRect(CRect(m_ptOrigin , point) ,&amp;brush);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

创建一个画刷,初始化格式为:
CBrush( );

CBrush( COLORREF crColor );
throw( CResourceException );

CBrush( int nIndex, COLORREF crColor );
throw( CResourceException );

CBrush( CBitmap* pBitmap );
throw( CResourceException );

<wbr></wbr>

void FillRect( LPCRECT lpRect, CBrush* pBrush);用pBrush来填充 Rect区域。

<wbr></wbr>

7.<wbr><wbr><wbr>CBitmapbitmap;<br><wbr><wbr><wbr><wbr>bitmap.LoadBitmap(IDB_BITMAP1);<br><wbr><wbr><wbr><wbr>CBrush brush(&amp;bitmap);<br><wbr><wbr><wbr><wbr>CClientDC dc(this);<br><wbr><wbr><wbr><wbr>dc.FillRect(CRect(m_ptOrigin , point) ,&amp;brush);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

用位图来填充画刷,首先要初始化一个Bitmap类,通过LoadBitmap函数来导入位图。


8.<wbr><wbr> CClientDCdc(this);<br><wbr><wbr><wbr><wbr>dc.Rectangle(CRect(m_ptOrigin,point));</wbr></wbr></wbr></wbr></wbr></wbr>

画一个矩形区域,图形会覆盖。


9.<wbr><strong>CClientDC dc(this);<br><wbr><wbr>CBrush *pBrush =CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));<br><wbr><wbr> CBrush *pOldBrush =dc.SelectObject(pBrush);<br><wbr><wbr>dc.Rectangle(CRect(m_ptOrigin,point));<br><wbr><wbr>dc.SelectObject(pOldBrush);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></strong></wbr>

透明画刷的使用。

FromHandle是CBrush类得静态函数,static CBrush* PASCALFromHandle( HBRUSH hBrush );Returns a pointer to a CBrushobject when given a handle to a Windows HBRUSH object.

The GetStockObject function retrieves a handle to one ofthe stock pens, brushes, fonts, or palettes.

<wbr></wbr>

<wbr></wbr>

静态成员函数,在类初始化过程中便产生。没有初始化对象,通过::引用即可使用。

但是,内部变量如果不是静态的,且在没有初始化时,使用静态成员函数,函数中使用了这些变量,会发生错误,因为这些变量没有初始化产生。

非静态成员函数可以使用静态成员函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值