使用鼠标给出任意2点,绘制直线

来源:百度知道 编辑:UC知道 时间:2024/06/14 10:07:28
使用鼠标给出任意2点,绘制直线。可以使用DDA或中点画线法或Bresenham算法生成直线。

求助

很简单啊,利用VC的消息响应函数WM_LBUTTONUP,单节获取坐标位置会吧。
思路:定义两个CPoint变量A,B,都初始化为(0,0);
单击动作:单击时,判断A,B的横纵坐标是否都一样,如果一样,将单击点赋值给A,如果不一样,赋值给B,然后画一条从A到B的直线。画完直线后将B位置赋值给A
画直线:用pDC->MoveTo()和pDC->LineTo()
如果需要程序,我可以给你编,不过建议自己动手,可以加深理解。

本人刚学C++时编了个围棋程序,有兴趣的话可以发给你。

我这有这两个画线算法的粗略实现,以前做的,MFC中实现

// Bresenham 画线算法
void CChildView::BresenhamLine(int x1, int y1, int x2, int y2 , COLORREF color )
{
CDC * pdc = GetDC() ;

int i , j , end , dx = abs(x2 - x1) , dy = abs(y2 - y1) ;
int k = abs(dy) > abs(dx) ? 1 : 0 , temp = dx - dy ;
int p = k ? dx + temp : dy - temp ;
int idir , jdir ;
if(k) {
i = y1 ;
j = x1 ;
end = y2 ;
jdir = x2 > x1 ? 1 : -1 ;
idir = y2 > y1 ? 1 : -1 ;
}
else {
i = x1 ;
j = y1 ;
end = x2 ;
idir = x2 > x1 ? 1 : -1 ;
jdir = y2 > y1 ? 1 : -1 ;
}
for( ; i != end ; i += idir ) {
k ?