请问如何 在MFC,用最简单的方法画出两点一线?而且要持续显示~~

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问如何 在MFC,用最简单的方法画出两点一线?而且要持续显示~~相关的知识,希望对你有一定的参考价值。

请教高手~~可以的话附带中文解释,好的再点加分~
尽量 简单···谢谢~

画线:定义一个成员变量保存mouseDown的点m_Point
1)API函数方法画线用HDC
2)用CDC类成员函数画线。此时别忘记ReleaseDC
3)用CClientDC
4)用CWindowDC,用它甚至可以整个屏幕区域画线。
下面是上面4种方法的代码
/*HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);必须成对使用。*/
/*CDC *pDC=GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);必须成对使用。*/

//CClientDC dc(this);
/*CClientDC dc(GetParent());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);此处不需要ReleaseDC,因为CClientDC会自动释放DC*/

//CWindowDC dc(this);
//CWindowDC dc(GetParent());
/*CWindowDC dc(GetDesktopWindow());//此时可以在整个屏幕上画线。
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/
/*CPen pen(PS_DOT,1,RGB(0,255,0));
CClientDC dc(this);
CPen *pOldPen=dc.SelectObject(&pen);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);*/
5)用Bitmap填充所画的矩形。
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush brush(&bitmap);
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);
//CBRUSH::FromHandle是静态成员函数,所以可以用下面的方法调用。
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
CBrush *pOldBrush=dc.SelectObject(pBrush);
dc.Rectangle(CRect(m_ptOrigin,point));
dc.SelectObject(pOldBrush);
m_bDraw=FALSE;
6)用其它颜色画线
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen=dc.SelectObject(&pen);//选中红色画笔
if(m_bDraw==TRUE)

dc.SetROP2(R2_BLACK);//设置绘画模式
dc.MoveTo(m_ptOrigin);
//dc.LineTo(point);
dc.LineTo(m_ptOld);
//dc.MoveTo(m_ptOrigin);
dc.MoveTo(m_ptOld);
dc.LineTo(point);
//m_ptOrigin=point;
m_ptOld=point;

dc.SelectObject(pOldPen);
参考技术A (1)在CXXXView类中加入鼠标按下和弹起的消息;
(2)添加一个CPoint成员变量m_ptOrigin,
(3)构造函数中:m_ptOrigin=0;//初始化

(4)在OnLButtonDown函数中(鼠标按下处理的消息):
m_ptOrigin=point;//为的是保存鼠标移动的点

(5)在OnLButtonUp函数中(鼠标弹起处理的消息):

CClientDC dc(this);//获取设备上下文
dc.MoveTo(m_ptOrigin);//移动起点
dc.LineTo(point);//画线至终点

参考资料:孙鑫VC++

请问mfc如何画出能被选中的直线

例如,这是选择前
左击图线就选中了成了蓝色的了

首先必须通过类成员或者全局变量记录所有所画线段坐标,并记录对应每个线段的被选中标记;

当鼠标点击OnLButtonDown时,自己做一个小算法判断点击坐标是否在线段上(需要至少1坐标的误差兼容),如果在,标记选中标记(或取消),并Invalidate触发重绘;
在OnDraw中,根据线段选中标记画线即可。
参考技术A 所有你所看到的能被选中的状态,从界面上讲,都是对该选中区域进行了重绘,这样你的主观感觉就是能够选中。因此,你要实现这种功能,就是判断你的选中操作,如果被认定是进行选中操作,那么可以对该区域(有必要时对整个窗口)进行重绘,重绘时,用不同的图案或颜色等进行绘制。 参考技术B 被选中时画成蓝线。

以上是关于请问如何 在MFC,用最简单的方法画出两点一线?而且要持续显示~~的主要内容,如果未能解决你的问题,请参考以下文章

vc MFC中,知道一个起点,一条直线方程y=kx+b,怎么在界面上画出这条直线?

由两点坐标如何画出直线 matlab

请问Cad制图测量两点间的距离如何操作?谢谢啦!

单纯形算法详细解析

请问如何用matlab画出一个三维的正方体?

请问c# 中如何实现在PictureBox中通过鼠标拖拽画出矩形框呢?picturebox中的MouseDown和MouseMove如何使用