为类添加的成员变量要先初始化,类的静态成员变量要在类外进行初始化
说明
要在窗口中输出文字或者显示图形都要用到窗口的设备描述表
(Device Context,简称DC)。在Windows平台下,所有的图形操作都是利用DC来完成的。
设备描述表屏蔽了用户与底层硬件之间的联系,由它负责与底层互动
利用各种类或者函数实现画线的方法
-
利用SDK全局函数实现画线
要有获得DC
和释放DC
的语句,并且调用的全局函数前加::
(域作用标识符) -
利用MFC的CDC类实现画线
CDC类
封装了所有与绘图
相关的操作,内部提供一个数据成员m_hDC
,来保存与CDC相关的DC句柄。
也要利用CWnd类
的成员函数GetDC
和ReleaseDC
来获得和释放设备描述表。 -
利用MFC的
CClientDC类
实现画线
CClientDC
派生自CDC类
,在构造时就调用了GetDC
函数,在析构时就调用了ReleaseDC
函数。因此不再需要显式的调用两个函数了。
CClientDC的对象在构造时,需要传递一个CWnd指针参数。
窗口的位置关系
整个程序 窗口就是框架窗口
,工具栏以下区域是视类窗口。
视类窗口只有客户区(即它本身),框架窗口有客户区(菜单栏以下部分)还有非客户区(标题栏和菜单栏)
利用MFC的CWindowDC实现画线
基本与利用CClientDC实现画线的程序一样,只是画图的区域除了客户区还有非客户区。
画线的进阶操作
-
绘制彩色线条
先定义一个特定颜色的画笔
,将此画笔选入设备描述表,利用设备描述表画线。CPen
可以用来创建画笔对象。
一种构造函数是CPen(int nPenstyle,int nWidth,COLORREF crColor)
,分别指定线型,线宽和颜色。
在程序中,当构造一个GDI对象后,并不会立即生效,必须选入设备描述表,它才以生效 。SelectObject
函数。
> GDI是图形设备接口(Graphics Device Interface, 或Graphical Device Interface)的简称,是Windows系统表征图形对象及将其传送给诸如显示器、打印机之类输出设备的标准。 -
使用画刷绘图
画刷对象可以由CBrush类
创建。 -
位图画刷
画刷的构造函数CBrush(CBitmap* pBitmap)
。
创建CBbitmap对象,仅通过其构造函数还不可以,还需要初始化函数。创建插入一个资源
(resource) -
透明画刷
从画刷句柄到画刷对象,可以利用CBrush类
的FromHandle
函数来实现,这是一个静态
成员函数,通过类名可以直接调用。
静态成员函数和静态成员变量属于类本身,在类加载的时候,已经有了内存空间,可以通过类名::
函数名或者类名::
变量名来访问;而非静态成员
函数和非静态成员变量属于对象的方法和数据,只能先产生对象 ,再由对象去引用。
> 静态成员变量用stacic限定符标明,必须在类的定义之外对它进行初始化。 -
绘制连续线条
绘制连续线条的话需要考虑下一段线的起点是现在的终点,需要不断的变换。 -
绘制扇形效果的线条
保存鼠标每一个移动的点,以最开始的原点到现在的点会绘制一条线;从现在的点到上一个鼠标的点也会绘制一条线,这样的扇形就有了边线。
绘图模式需要试验。