欢迎来到天天文库
浏览记录
ID:40239573
大小:1.34 MB
页数:97页
时间:2019-07-28
《Visual C++程序设计教程 梁建武 第9章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第9章绘图与打印第9章绘图与打印图形功能在所有的Windows程序中具有重要的地位;Windows是一个与设备无关的操作系统,不允许直接访问硬件,如果用户想将文本和图形绘制到显示器或其他某个设备,必须通过“设备环境”这个抽象层与硬件进行通信;设备环境DC(DeviceContext)9.1设备环境类设备环境是把应用程序与设备驱动器相联的一种数据结构,设备环境实际上相当于一个画布,所有的绘图操作在上面进行。MFC提供了设备环境类,它们能使DC的处理更容易。Windows图形设备接口功能被封装在两个MFC类中:设备环境类CDC和图形设备接口对象类GDI(GraphicsDevice
2、Interface)。Win32API提供的4种设备环境:显示器环境:支持图形在视频显示器上运行。信息环境:用于检索设备环境。类存环境:支持在位图上进行图形操作。打印机环境:支持在打印机或绘图仪上进行图形操作。9.1.1设备环境类CDCMFC中所有的设备环境都是从基类CDC类派生出来的。CDC类封装了Windows设备环境的主要功能,大概共有180个成员函数。通过调用函数CreateDC()来构造一个设备环境。一个CDC对象有两个指示GDI设备环境句柄的成员变量:m_hDC和m_hAttribDC。m_hDC是CDC对象的输出设备环境m_hAttribDC是CDC对象属性设备环
3、境在文档/视结构的程序中典型的OnDraw函数:voidCEg_1View::OnDraw(CDC*pDC){CDocument*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere}删除CDC对象方法一:在栈中构造对象,由析构函数在函数返回时自动触发voidCEgView::OnRButtonUp(UINTnFlags,CPointpoint){CRectrect;CClientDCdc(this);//在栈中构造dcdc.GetClipBox(rect);//dc自动释放}删除CD
4、C对象(续)方法二:通过调用ReaseDC函数来释放设备环境voidCEgView::OnRButtonUp(UINTnFlags,CPointpoint){CRectrect;CDC*pDC=GetDC();//获取一个指向dc的指针pDC->GetClipBox(rect);ReleaseDC(pDC);//必须调用ReleaseDC删除//此对象}9.1.2其它设备环境类CPaintDC:CPaintDC对象封装了Windows的通用方法:调用BeginPaint函数,并在设备描述表中绘画,然后调用EndPaint函数。CPaintDC主要针对WM_PAINT消息,用在O
5、nPaint()函数中。实例:下面的OnPaint()函数中,创建了一个CPaintDC对象。voidCMyView::OnPaint(){CPaintDCdc(this);OnPrepareDC(&dc);dc.TextOut(0,0,”forthedisplay,notfortheprinter”);OnDraw(&dc);}第二个设备环境类CClientDCCClientDC对象封装了窗口客户区的设备环境。在CClientDC的构造函数中调用了Windows的GetDC函数,在析构函数中调用了ReleaseDC函数。实例Eg9_1:在客户区内画一条对角线步骤1.创建一个单
6、文档应用程序Eg9_1。步骤2.选择View|ClassWizard,在MFCClassWizard对话框中确定Classname和ObjectIDs都选择了CEg9_1View,然后在Messages框中选择WM_LBUTTONDOWN,双击它为单击鼠标左键其添加消息响应函数。消息响应函数代码:voidCEg9_1View::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefault//建立一个CClientDCCClientDCdc(this);//在
7、建立的DC上画线CRectrect;GetClientRect(&rect);dc.MoveTo(0,0);//可以修改为dc.MoveTo(rect.left,rect.top);dc.LineTo(rect.right,rect.bottom);CView::OnLButtonDown(nFlags,point);}实例Eg9_1(续)步骤3.展开Eg9_1Resource|StringTable,双击StringTable,修改IDR_MAINFRAME对应的字符串属性对话框。实例Eg
此文档下载收益归作者所有