| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1559 人关注过本帖
标题:逻辑坐标和设备坐标 以及滚动条正常显示
只看楼主 加入收藏
kay_leo
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-5-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
逻辑坐标和设备坐标 以及滚动条正常显示

    if (!pDoc)
        return;
    //设置映射模式,单位为0.1mm,引时窗口坐标系以客户区左上角为原点,X轴的方向为从左往右,Y轴的方向为从下往上
    pDC->SetMapMode(MM_LOMETRIC);
    //获得客户区域
    CRect rc;
    GetClientRect(&rc);
    //将客户坐标转换为逻辑坐标,
    pDC->DPtoLP(&rc);
    //在逻辑坐标下,意图将视口原点所置的位置
    CSize org(100,-(rc.bottom+200));
    //将该位置转换为设置坐标,方便移动视口坐标原点
    pDC->LPtoDP(&org);
    //移动视口坐标原点,整个坐标尺在可见区域
    pDC->SetViewportOrg(org.cx,org.cy);
   
    //在逻辑坐标系下画X轴,起点为逻辑坐标系下的原点,终点为自定的
    pDC->MoveTo(0,0);
    //X轴的长度为客户区的宽度减去5厘米(一个象素单位为0.1mm),此时X轴终点距右边框的距离将为3cm(视口原点已经移
    //动到距左边框2cm处)
    pDC->LineTo(rc.right-500,0);
    //以下代码用来画X轴的终点箭头
    pDC->MoveTo(rc.right-540,20);
    pDC->LineTo(rc.right-500,0);
    pDC->MoveTo(rc.right-540,-20);
    pDC->LineTo(rc.right-500,0);
    pDC->TextOut(rc.right-450,0,"x(cm)");
   
    //在逻辑坐标系下画Y轴,起点为逻辑坐标系下的原点,终点为自定的
    pDC->MoveTo(0,0);
    //Y轴的长度为客户区的高度减去5厘米(一个象素单位为0.1mm),此时Y轴终点距上边框的距离将为3cm(视口原点已经移
    //动到距下边框2cm处)
    pDC->LineTo(0,-rc.bottom-500);
    //以下代码用来画Y轴的终点箭头
    pDC->MoveTo(-20,-rc.bottom-540);
    pDC->LineTo(0,-rc.bottom-500);
    pDC->MoveTo(20,-rc.bottom-540);
    pDC->LineTo(0,-rc.bottom-500);
    pDC->TextOut(0,-rc.bottom-450,"y(cm)");
   
      //在画标尺时,刻度的最大单位为cm,最小单位为mm,坐标轴上只画有整数个cm段,并在相应的位置标明cm刻度
      //计算X轴可以画出多少个cm刻度
      int num = (rc.right-100)/100;
      //利用循环画X轴上的刻度,i表示第多少个mm刻度,总共为num*10个毫米刻度
      for( int i = 1;i<=num*10; i++)
      {
      //毫米刻度能为5整除,此时的可能值为:5,10,15……
      if(i%5==0)
      {
      //刻度为10的倍数时,画出刻度标记,它的长度为4mm,并在刻度的下方标明刻度值,单位为cm
      if(i%10==0)
      {
      pDC->MoveTo(i*10,0);
      pDC->LineTo(i*10,40);
      CString str;
      str.Format("%d",i/10);
      pDC->TextOut(i*10-10,-10,str);
      }
      else////刻度为5,15等时,画出刻度标记,它的长度为2mm
      {
      pDC->MoveTo(i*10,0);
      pDC->LineTo(i*10,20);
      }
      }
      else//画出其它毫米刻度
      {
      pDC->MoveTo(i*10,0);
      pDC->LineTo(i*10,10);
      }
      }
      
        //计算Y轴可以画出多少个cm刻度
        num = (-rc.bottom-100)/100;
        //相用画X轴上的坐标相同的方法来绘制Y轴坐标,此时注意绘画点的改变
        for( i = 1;i<=num*10; i++)
        {
        if(i%5==0)
        {
        if(i%10==0)
        {
        pDC->MoveTo(0,i*10);
        pDC->LineTo(40,i*10);
        CString str;
        str.Format("%d",i/10);
        pDC->TextOut(-45,i*10+10,str);
        }
        else
        {
        pDC->MoveTo(0,i*10);
        pDC->LineTo(20,i*10);
        }
        }
        else
        {
        pDC->MoveTo(0,i*10);
        pDC->LineTo(10,i*10);
        }
        }
搜索更多相关主题的帖子: 坐标 设备 逻辑 滚动 
2010-05-11 10:14
myvc
Rank: 2
等 级:论坛游民
威 望:1
帖 子:85
专家分:89
注 册:2009-10-25
收藏
得分:20 
顶一下,我也遇到了这个问题
2010-05-11 22:52
快速回复:逻辑坐标和设备坐标 以及滚动条正常显示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021153 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved