C++的MFC实现DDA算法画直线,从目录创建到完整代码

首先给他一个菜单栏的按钮

C++的MFC实现DDA算法画直线,从目录创建到完整代码_第1张图片

然后在属性处给他一个ID 

C++的MFC实现DDA算法画直线,从目录创建到完整代码_第2张图片

然后在类视图右键你的view(是你的项目名称后面带一个view的那个)点击属性

C++的MFC实现DDA算法画直线,从目录创建到完整代码_第3张图片

然后 在消息栏给他一个消息,会自动生成一个空函数体

C++的MFC实现DDA算法画直线,从目录创建到完整代码_第4张图片

 然后取事件栏给他一个事件,会生成一个空函数体void CMFCApplication1View::OnDdaLine()

C++的MFC实现DDA算法画直线,从目录创建到完整代码_第5张图片

 给void CMFCApplication1View::OnDdaLine()加以下代码:

void CMFCApplication1View::OnDdaLine()
{
	// TODO: 在此添加命令处理程序代码
	MenuDrawType = 2;
	PressNum = 0;
}

 然后给void CMFCApplication1View::OnLButtonDown(UINT nFlags, CPoint point)添加代码

void CMFCApplication1View::OnLButtonDown(UINT nFlags, CPoint point)
{// TODO: 在此添加消息处理程序代码和/或调用默认值
	CClientDC dc(this);//定义当前绘图区
	CRect rect;
    else if (MenuDrawType == 2) {//拿的是DDA
		//GetClientRect(&rect);//获得客户区大小
		
		if (PressNum == 0) {//第一次点击
			startP = point;
			endP = point;//使线段一直都在,终点始终是鼠标
			PressNum++;
		}
	
		else {//第二次点击
			endP = point;
			int dx = endP.x - startP.x;
			int dy = endP.y - startP.y;
			int steps, k;
			float xincrement, yincrement, x = startP.x, y = startP.y;
			if (abs(dx) > abs(dy)) 
				steps = abs(dx);
			else steps = abs(dy);
			xincrement = dx / float(steps);
			yincrement = dy / float(steps);
			SetPixel(dc, startP.x, startP.y, RGB(255, 0, 0));
			for (k = 0; k < steps; k++) {
				x += xincrement;
				y += yincrement;
				SetPixel(dc, x, y, RGB(255, 0, 0));
			}
			PressNum = 0;
			//GetCursorPos(&startP);
			//GetCursorPos(&endP);
		}
	}
	CView::OnLButtonDown(nFlags, point);//这句是自带的别删了
}

你可能感兴趣的:(c++,开发语言,mfc)