关于该函数的原型及参数可以参考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,由回调函数完成相应的操作。
下面给出一个示例程序:
- 建立一个MFC应用程序;
- 在函数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);
}
- 添加回调函数代码如下: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"));
}
}
- 运行结果:
分享到:
相关推荐
在给出的代码片段中,`CcgdemoView::LineDDA`函数实现了上述DDA算法。该函数接收五个参数:绘图设备上下文`pDC`、起点坐标`(x0, y0)`、终点坐标`(x1, y1)`以及颜色`color`。 1. **特殊情况处理**: - 若x0 == x1,...
在VC++编程环境中,开发...总之,"MultiLine_multiline添加点_Vc_"是一个关于使用VC++和GDI在多行线条上动态添加节点的技术,涉及到GDI的LineDDA函数和自定义回调函数,这对于理解Windows图形编程和GDI机制非常有帮助。
TextOut 文本绘图函数 6. API之菜单函数 AppendMenu 在指定的菜单里添加一个菜单项 CheckMenuItem 复选或撤消复选指定的菜单条目 CheckMenuRadioItem 指定一个菜单条目被复选成“单选”项目 CreateMenu 创建...
实验的目的是为了熟悉使用实验主要开发平台 VC6.0,掌握如何在编译平台下编辑、编译、连接和运行一个简单的 Windows 图形应用程序,以及学会使用基本绘图函数和 Window GDI 对象。 实验内容包括创建基于 MFC 的 ...
计算机图形学是一门深入研究如何在计算机系统中生成、操作和显示图形的学科。本实验报告主要围绕两个核心主题展开:Window图形编程基础和基本图形生成算法。 首先,我们关注Window图形编程基础。实验旨在帮助学生...
现在我们可以在视图类的 `OnDraw` 函数中使用 `CGDrawDC` 类中的 `LineDDA` 函数了。例如: ```cpp void CGDView::OnDraw(CDC* pDC) { // 使用 CGDrawDC 类的 LineDDA 函数画线 ((CGDrawDC*)pDC)->LineDDA(100, ...
计算机图形学是信息技术领域的一个重要分支,它涉及利用数学算法及计算技术来生成、操作以及显示图像。在《计算机图形学实验:三维场的选择问题》这一主题中,我们深入探讨了三维空间中的图形渲染和场景建模,特别是...
- OpenGL中的直线是有宽度的,并且是有限长度的,它由两个端点定义,可以看作是数学中的线段。 - 使用`glBegin`和`glEnd`函数包围顶点指定,以告诉OpenGL如何处理这些点,例如,将`GL_POINTS`改为`GL_LINES`将绘制...
- **绘图函数`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...