友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

C语言实例教程(PDF格式)-第68部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


这样的例子。  



前面提到过,使用下面的函数调用可以自定义设备上下文对象dc的坐 

标映射。  



dc。SetMapMode(MM_ANISOTROPIC);  



但是,在使用了上面的代码之后,还需要具体的指定自定义坐标系统 

在x方向和y方向上的单位长度、坐标轴正方向以及视口左上角的位置 

在坐标映射中所对应的坐标值等。这个操作是通过调用CDC类的成员 

函数SetWindowExt和SetViewportExt来实现的。  



                                         



             图9。 17 设备上下文中窗口和视口的关系  



图9。17说明了在设备上下文中窗口 (Window)和视 口(ViewportExt)的 

关系。视口度量的设置以设备象素为单位,而窗口度量的设置则几乎 

的任意的。所谓的自定义坐标系统即是将由窗口定义的坐标系统映射 

到由视 口定义的设备上下文中的区域。  



  l 注意:  



  l 上面的术语 “窗口”并不是指Windows中的窗口对象,而是在设备 

   上下文中进行坐标映射时使用的一个抽象概念。在本节中,具有 

   上述意义的术语 “窗口”有可能和通常意义中的Windows术语 “窗 

   口”混用,读者应根据具体的上下文明确其含义。  



在调用SetViewportExt设置视口之前必须先调用SetWindowExt设置窗 

口。  


…………………………………………………………Page 589……………………………………………………………

函数SetWindowExt可以使用两个整型量作为其参数,也可以使用一个 

CSize对象作为其参数。它指定了窗口的横向度量和纵向度量。当所 

指定的横向度量为负值时,表示x轴的正方向向左;当所指定的纵向 

度量为负值时,表示y轴的正方向向上。  



同时还可以使用函数SetWindowOrg来设置窗口左上角对应的坐标。这 

样就可以实现坐标平面原点的平移。  



在设置了窗口之后,我们还需要调用SetViewportExt函数设置视口。  



函数SetViewportExt使用了与SetWindowExt相类似的参数。它们指定 

了视口的横向度量和纵向度量。类似的,我们还可以使用函数 

SetViewportOrg来设置视口的左上角的屏幕坐标。这里需要注意的 

是,在函数SetViewportExt和SetViewportOrg中所使用的参数的量值 

是以设备象素为单位的。  



上面所提到的这些函数都是CDC类的成员函数。  



下面所给的示例程序FuncGraphy输出一个函数'示例中是                    '的图 

象。为了方便起见,我们使用了自定义的坐标系统。在该坐标系统 

中,原点的窗口客户区中的中心,横坐标的范围为?31。006到 

31。006,在这个范围内恰好包括函数的一个完整的图象范围。其纵坐 

标的范围为1。2到 1。2。  

              ? 



为了节省篇幅,我们这里仅给出应用程序主窗口的OnPaint函数:  



// 应用程序主窗口的重绘函数  



void CMyWnd::OnPaint()  



{  



// 获得窗口的客户区设备上下文句柄  



CPaintDC dc(this);  



// 设置映射模式为 MM_ANISOTROPIC  



dc。SetMapMode(MM_ANISOTROPIC);  



// 设置窗口左上角的坐标为  



dc。SetWindowOrg(…31006; 1200);  



// 设置窗口度量  


…………………………………………………………Page 590……………………………………………………………

dc。SetWindowExt(int(2000*31。006); …2400);  



// 获得客户区矩形  



CRect rc;  



GetClientRect(rc);  



// 设置视口左上角的坐标  



dc。SetViewportOrg(0; 0);  



// 设置视口度量  



dc。SetViewportExt(rc。Width(); rc。Height());  



// 创建蓝色实线画笔  



CPen pen(PS_SOLID; 1; RGB(0; 0; 255)); *pOldPen;  



pOldPen=dc。SelectObject(&pen);  



// 创建蓝色斜线刷子  



CBrush br(HS_BDIAGONAL; RGB(0; 0; 255)); *pOldBrush;  



pOldBrush=dc。SelectObject(&br);  



// 开始一个路径  



dc。BeginPath();  



dc。MoveTo(…31006; 0);  



for (double x=…31。006; x
返回目录 上一页 下一页 回到顶部 1 1
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!