windows已是pc机的霸主,当然在windows操作系统上的c++首选集成开发环境是visual c++。下面介绍一下windows的图形环境介绍。visual c++(MFC)所编写的windows应用程序通常在视图类中通过OnDraw()虚函数中添加绘图代码来完成图形的生成。每次CView类封装的视图类窗口在接到WM_PAINT消息后通过消息映射函数OnPain()调用OnDraw(,
//this code snippet is in document 'visual studio 2010\VC\atlmfc\src\mfc\viewcore.cpp'
void CView::OnPaint()
{
//standard paint routine
CPaintDC dc(this);
OnPrepareDC(
&dc);
OnDraw(
&dc);
}
WM_PAINT消息在某个视图窗口需要重绘时或刷新时发出。(例如:程序的数据被改变,可调用视图类的Invalidate()成员函数,将导致最终OnDraw()的调用完成绘图工作)。图形的输出设备有显示器,打印机和绘图仪等,为了实现图形的输出与设备无关,Windows应用程序使用了(Graphical Device Interface)进行图形的编程。GDI包含了Windows提供的全部绘图函数,这些函数会自动地参考(Device Context)设备上下文(一种数据结构).而windows则自动将设备上下文映射到具体的物理设备上而实现图形输出。windos不允许直接操作显示设备(如显示器),而是通过一个抽象层与设备上下文进行通讯。device context是GDI中的重要组成部分。它是一个数据结构,DC结构中定义了一系列图形对象和图形对象的属性和图形输出的图形模式。图形对象包括画线的画笔(Pen),用于填充图形的画刷(Brush),位图(Bitmap)和调色板(palette)等。Device Contex表示物理设备的逻辑形式。windows和MFC提供四种类型的设备上下文:*Display Device Context,将信息输出到显示器上;*Printer Device Context,将信息输出到打印机上;*Memory Device Context,为特定的设备保存位图图形;*Information Device Context,用于访问默认设备数据信息的设备上下文(此DC不能用于实现输出)。设备上下文不能直接被应用程序使用。只能通过调用有关函数或者是使用设备上下文的句柄(HDC)来间接地存取此结构的属性。MFC提供不同类型的设备上下文的类,每一个类都封装了代表windows设备上下文的句柄(HDC)和函数。1,CDC类,是所有设备上下文的基类。其中包含数据成员和函数成员。2,CPaintDC类,该类是OnPaint()函数使用的dc,代表窗口的绘图画面。如果重新编写OnPaint()函数,则要重新顶一个CPaintDC对象。它的构造函数自动调用BeginPaint(),为连接一个与该CPaintDC的窗口,其析构函数自动调用EndPaint()来释放设备上下3,CClientDC类,该类是窗口客户区的设备上下文类,代表客户区窗口的绘图。客户区窗口不包括边框,标题栏和菜单栏。它的构造函数自动调用GetDC()来创建,调用ReleaseDC()。。4,CWindowDC类:该类是包含整个窗口区域的设备上下文,允许用户在显示器屏幕的任何地方绘图。包括窗口的边框,标题区域。它的构造函数调用GetWindowDC(),析构调用ReleaseDC()。 5,CMetaFileDC类,它用于创建一个windows图元文件的设备上下文。 //计算机图形学 清华大学出版社