正在加载图片...
第13单元文档读写与打印 259 程序:在例12-程序的视图类 CMy View类的成员函数 OnDraw()中,添加代码 沿窗口客户区轮廓画一矩形: void CMyView:: OnDraw (CDC* pDC) CRect rect GetClientRect(&rect) pDC->Rectangle(rect) CMy Doc GetDocument o //取文档指针 ASSERT VALID(pI pDC-> SelectstockOb ject( LTGRAY BRUSH);//在视图上显示文档数据 for(int i=0: i<pDoc->G etlistsize pDC->Ellipse(pDoc->GetBubble(i)) 输入输出:用鼠标左键在窗口客户区吹泡泡。打开文件菜单的打印预览选项,可观察打 口无 图13-1缺省映射模式( MM TEXT)下的打印效果 印效果,如图13-1。 分析:通过打印预览,可观察到打印输出集中在打印纸的左上角,窗口客户区矩形 仅占打印纸的很小一部分。在窗口边沿生成的泡泡,在打印时并不受窗口边界的限制。 要正确打印输出屏幕上的内容,就必须解决这些问题。对于第一个问题,解决方法为利 用CDC: SetMap Mode( int nOde)设置其他映射模式,例如采用 MM LOMETRIC模式 该模式的基本单位不是像素,而是0.1毫米。采用这类映射模式编程,可使窗口显示图象和 打印图象的比例相近 但采用非 MM TEXT模式编程相当麻烦。首先,这些逻辑坐标的y轴方向与 MM TEXT 模式不同,下负上正,原点在窗口左上角,所以客户区的y坐标均为负值。第二,由于逻辑 坐标和物理坐标不一致,所以在响应鼠标消息时要进行换算(可参看第10单元的有关内容)。 例13-3改进吹泡泡程序,使之打印输出与屏幕显示的比例相近 程序:在例12-1基础上修改。首先在 CMy View类中重载虚函数 OnPrepareDC()。 在 CMy View类的声明中增加一行:第 13 单元 文档读写与打印 - 259 - 程 序:在例 12-1 程序的视图类 CMyView 类的成员函数 OnDraw()中,添加代码 沿窗口客户区轮廓画一矩形: void CMyView::OnDraw(CDC* pDC) { CRect rect; GetClientRect(&rect); pDC->Rectangle(rect); CMyDoc* pDoc = GetDocument(); // 取文档指针 ASSERT_VALID(pDoc); pDC->SelectStockObject(LTGRAY_BRUSH); // 在视图上显示文档数据 for(int i=0; i<pDoc->GetListSize(); i++) pDC->Ellipse(pDoc->GetBubble(i)); } 输入输出:用鼠标左键在窗口客户区吹泡泡。打开文件菜单的打印预览选项,可观察打 印效果,如图 13-1。 分 析:通过打印预览,可观察到打印输出集中在打印纸的左上角,窗口客户区矩形 仅占打印纸的很小一部分。在窗口边沿生成的泡泡,在打印时并不受窗口边界的限制。 要正确打印输出屏幕上的内容,就必须解决这些问题。对于第一个问题,解决方法为利 用 CDC::SetMapMode(int nMode)设置其他映射模式,例如采用 MM_LOMETRIC 模式。 该模式的基本单位不是像素,而是 0.1 毫米。采用这类映射模式编程,可使窗口显示图象和 打印图象的比例相近。 但采用非 MM_TEXT 模式编程相当麻烦。首先,这些逻辑坐标的 y 轴方向与 MM_TEXT 模式不同,下负上正,原点在窗口左上角,所以客户区的 y 坐标均为负值。第二,由于逻辑 坐标和物理坐标不一致,所以在响应鼠标消息时要进行换算(可参看第 10 单元的有关内容)。 [例 13-3] 改进吹泡泡程序,使之打印输出与屏幕显示的比例相近。 程 序:在例 12-1 基础上修改。首先在 CMyView 类中重载虚函数 OnPrepareDC()。 在 CMyView 类的声明中增加一行: 图 13-1 缺省映射模式(MM_TEXT)下的打印效果
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有