`
hustwcw
  • 浏览: 11121 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于LineDDA函数(主要是关于其是否有绘图操作)

阅读更多

关于该函数的原型及参数可以参考msdn:

The LineDDA function determines which pixels should be highlighted for a line defined by the specified starting and ending points.(指定由给定的起点和终点定义的线段上应该被“高亮”的像素)这个“高亮(highlighted)”用的很奇怪,让人不知道是什么意思,是不是要画线的意思?

BOOL LineDDA(
  int nXStart,             // x-coordinate of starting point
  int nYStart,             // y-coordinate of starting point
  int nXEnd,               // x-coordinate of ending point
  int nYEnd,               // y-coordinate of ending point
  LINEDDAPROC lpLineFunc,  // callback function
  LPARAM lpData            // application-defined data
);

Parameters

nXStart
[in] Specifies the x-coordinate, in logical units, of the line's starting point.
nYStart
[in] Specifies the y-coordinate, in logical units, of the line's starting point.
nXEnd
[in] Specifies the x-coordinate, in logical units, of the line's ending point.
nYEnd
[in] Specifies the y-coordinate, in logical units, of the line's ending point.
lpLineFunc
[in] Pointer to an application-defined callback function. For more information, see the LineDDAProc callback function.
lpData
[in] Pointer to the application-defined data.

LineDDA函数不会绘制直线,仅仅是调用回调函数。这个是我一直不能确定的问题,经过查阅资料和实例操作才得出这样的结论的。该函数使用Bre画直线算法求出直线上的点坐标,每计算出一个坐标,就将其和程序定义的数据lpData传送给回调函数lpLineFunc,由回调函数完成相应的操作。

下面给出一个示例程序:

  1. 建立一个MFC应用程序;
  2. 在函数OnDraw中添加如下代码:void CSimpleView::OnDraw(CDC* pDC) { //Implementation Note: it is safe to pass our local reference //of the pDC object because all of the callbacks will complete //before the pDC goes out of scope. CSimpleDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); //Draw a Line pDC->MoveTo(10,10); pDC->LineTo(300,300); //Use LineDDA to Draw 0's at intervals along the line. ::LineDDA(10,10,300,300,(LINEDDAPROC)DrawZero,(long)pDC); }
  3. 添加回调函数代码如下:VOID CALLBACK DrawZero(int X,int Y,LPARAM lpData) { //This Callback routine will be called for every calculated //point in the line. //Implementation Note: Use lpData to pass a reference to a //CDC object for drawing. CDC* pDC; pDC = (CDC*)lpData; if( X % 20 ==0) { pDC->TextOut(X,Y,_T("0")); } }
  4. 运行结果:运行结果截图
分享到:
评论

相关推荐

    DDA画线算法的代码

    在给出的代码片段中,`CcgdemoView::LineDDA`函数实现了上述DDA算法。该函数接收五个参数:绘图设备上下文`pDC`、起点坐标`(x0, y0)`、终点坐标`(x1, y1)`以及颜色`color`。 1. **特殊情况处理**: - 若x0 == x1,...

    MultiLine_multiline添加点_Vc_

    在VC++编程环境中,开发...总之,"MultiLine_multiline添加点_Vc_"是一个关于使用VC++和GDI在多行线条上动态添加节点的技术,涉及到GDI的LineDDA函数和自定义回调函数,这对于理解Windows图形编程和GDI机制非常有帮助。

    API之网络函数---整理网络函数及功能

    TextOut 文本绘图函数 6. API之菜单函数 AppendMenu 在指定的菜单里添加一个菜单项 CheckMenuItem 复选或撤消复选指定的菜单条目 CheckMenuRadioItem 指定一个菜单条目被复选成“单选”项目 CreateMenu 创建...

    2022年计算机图形学实验报告分解.doc

    实验的目的是为了熟悉使用实验主要开发平台 VC6.0,掌握如何在编译平台下编辑、编译、连接和运行一个简单的 Windows 图形应用程序,以及学会使用基本绘图函数和 Window GDI 对象。 实验内容包括创建基于 MFC 的 ...

    计算机图形学实验报告.docx

    计算机图形学是一门深入研究如何在计算机系统中生成、操作和显示图形的学科。本实验报告主要围绕两个核心主题展开:Window图形编程基础和基本图形生成算法。 首先,我们关注Window图形编程基础。实验旨在帮助学生...

    图形编程01_CClientDC派生类的建立与使用

    现在我们可以在视图类的 `OnDraw` 函数中使用 `CGDrawDC` 类中的 `LineDDA` 函数了。例如: ```cpp void CGDView::OnDraw(CDC* pDC) { // 使用 CGDrawDC 类的 LineDDA 函数画线 ((CGDrawDC*)pDC)->LineDDA(100, ...

    计算机图形学实验 三维场的选择问题

    计算机图形学是信息技术领域的一个重要分支,它涉及利用数学算法及计算技术来生成、操作以及显示图像。在《计算机图形学实验:三维场的选择问题》这一主题中,我们深入探讨了三维空间中的图形渲染和场景建模,特别是...

    计算机图形学实验报告.doc

    - OpenGL中的直线是有宽度的,并且是有限长度的,它由两个端点定义,可以看作是数学中的线段。 - 使用`glBegin`和`glEnd`函数包围顶点指定,以告诉OpenGL如何处理这些点,例如,将`GL_POINTS`改为`GL_LINES`将绘制...

    glshiyan2 gl的dda算法

    - **绘图函数`LineDDA`**:接受四个参数(x1, y1, x2, y2),分别表示直线的起点和终点坐标。通过计算增量dx和dy,以及步长k,迭代更新坐标并绘制像素点。 - **`glPointSize`和`glBegin/GL_END`**:这些函数用于设置...

    计算机图形学

    在本例中,`linedda` 函数实现了DDA算法。 ```c void linedda(int x0, int y0, int x1, int y1, int color) { int x; float dy, dx, y; float m; dx = x1 - x0; dy = y1 - y0; m = dy / dx; // 斜率 y = y...

Global site tag (gtag.js) - Google Analytics