CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何编程实现铁路线,国界线等样式的线型!!

楼主IceWall(谁敢打我)2003-01-08 11:26:33 在 VC/MFC / 基础类 提问

如何编程实现铁路线,国界线等样式的线型!! 问题点数:100、回复次数:2Top

1 楼kangcau(我很菜)回复于 2003-01-08 11:31:26 得分 100

介绍:  
   使用“LineDDA”Win32   API   是产生复杂风格线条的一种很陈旧的方法LineDDA能被  
  用于创建虚线或点划线,以及更复杂的图形,例如波浪线或“铁路轨道”  
   这种方法首次出现于Windows   NT   3.1   ,现在在Windows   95/98上也支持   (Windows  
    CE不支持)  
   LineDDA是一个32位图形设备接口库函数调用。如下所示它接受一组线条坐标、一  
  个回调函数的地址和一个指向用户数据的指针   (摘自GDI:   Platform   SDK   )  
  BOOL   LineDDA(  
           int   nXStart,         //   线条起点的X坐标  
           int   nYStart,         //   线条起点的Y坐标  
           int   nXEnd,          //   线条终点的X坐标  
           int   nYEnd,          //   线条终点的Y坐标  
           LINEDDAPROC   lpLineFunc, //   回调函数的指针  
           LPARAM   lpData      //   应用程序定义数据的指针  
           );  
  The   callback   function   has   the   signature:   (Taken   from   the   GDI:   Platform   SDK)  
  回调函数形式如下:(摘自GDI:   Platform   SDK)  
  VOID   CALLBACK   LineDDAProc(  
               int   X,     //   被求值点的X坐标  
               int   Y,     //   被求值点的Y坐标  
               LPARAM   lpData    //   应用程序定义数据的指针  
               );  
  概念:  
   基本使用要求:LineDDA调用时应该带有线段坐标、LineDDAProc函数的地址和用  
  户定义数据图形设备接口将为线上的每个点调用LineDDAProc函数(终点除外)  
   LineDDA   不是一个什么也不画的图形例程,而是一个用于建立回调流的支持例程  
  (DDA指   数值微分分析)因此,线条总是被使用当前显示分辨率的缺省转换和映射  
  模式来计算的。如果不使用缺省方式,也可以向LineDDAProc传递手工转换的X和Y值  
  实现:  
   基本实现是在“OnDraw”中调用LineDDA,并向LineDDA传递一个函数的静态或全  
  局指针,该函数可以画出任何你要求的有趣的线条类型  
  void   CSimpleView::OnDraw(CDC*   pDC)  
    //实现注解:传入pDC对象的局部引用是安全的,因为在pDC超出范围之前所有  
  回调函数已经执行完成了  
    CSimpleDoc*   pDoc   =   GetDocument();  
    ASSERT_VALID(pDoc);  
    //画线  
    pDC->MoveTo(10,10);  
    pDC->LineTo(300,300);  
    //使用LineDDA沿线按一定间隔画“0”  
    ::LineDDA(10,10,300,300,(LINEDDAPROC)DrawZero,(long)pDC);  
  VOID   CALLBACK   DrawZero(int   X,int   Y,LPARAM   lpData)  
    //这个回调例程将在线上每个点处被调用  
    //实现注解:使用lpData传递用于绘图的CDC对象的引用  
    CDC*   pDC;  
    pDC   =   (CDC*)lpData;  
    if(   X   %   20   ==0)  
    {  
      pDC->TextOut(X,Y,_T("0"));  
    }  
   这种处理方法在简单的情况下有可以接受的性能,但在要求更严格的应用中就满  
  足不了要求  
   一个更好的办法是在“OnDraw”中使用这种方法为以后的使用预先计算点。假如  
  点是静态的,这种方法执行一次就行了。  
  结论:  
   LineDDA为画出复杂线条类型提供了一种解决办法。这是一种Win32的解决办法,  
  现在MFC并不直接支持(也许因为它并不是经常被使用)作为一个一般的解决办法,  
  它并一定十分有用.Top

2 楼loopyifly(深情咸鱼)回复于 2003-01-08 11:55:27 得分 0

upTop

相关问题

  • 如何编程实现铁路线,国界线等样式的线型!!
  • c#编程----绘制特殊线型
  • 关于线型~
  • 编程
  • 编程
  • 编程难,难编程!
  • ASP编程
  • ucdos+foxpro编程
  • COM编程
  • 网络编程 。

关键词

  • 函数
  • 坐标
  • 线条
  • 指针
  • 图形
  • 数据
  • 解决
  • sdk
  • linedda
  • lineddaproc

得分解答快速导航

  • 帖主:IceWall
  • kangcau

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo