MFC中LButtonDown下拖动鼠标绘制直线
来源:互联网 发布:足彩过滤软件下载 编辑:程序博客网 时间:2024/05/18 03:31
MFC中LButtonDown下拖动鼠标绘制直线
最近做一个项目,需要一个在绘制位图的视图上画直线,具体要求是按住鼠标左键拖动,然后放开左键绘制出一条直线。(下一次绘制时,不能清除上一次绘制的直线)。
具体思路如下:
(1).当鼠标左键按下时,记录下鼠标的位置,并设置一个标记记录下鼠标左键DOWN(当鼠标左键UP时,设置为UP);
(2).要实时绘制直线,则需要在鼠标移动时,刷新绘制;
(3).由于下一次绘制不能清除上一次绘制的直线,那么在刷新绘制时则需要用一个数组保存下前面绘制的直线,在每次刷新前将以前绘制的直线绘制出来;
(4).将最后一次绘制的直线保存到数组中;
(5).由于绘制较多直线,屏幕会闪射,则需要创建内存缓存DC来绘图;
具体代码实现:
(1).
A在鼠标左键按下消息中:
voidCDrawLineView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_Start.x = point.x; //保存鼠标左键按下时坐标,为直线的起点坐标
m_Start.y = point.y;
m_LbuttonFlag = 1; //设置鼠标左键按下标志,为1表示鼠标左键按下
}
B当鼠标左键UP时,则停止绘制:
voidCDrawLineView::OnLButtonUp(UINT nFlags, CPoint point)
{
m_LbuttonFlag = 0; //当值为0时,表示鼠标左键UP
if(m_ALine.front == m_ALine.size ||m_ALine.front > m_ALine.size)
{
LINE* line = newLINE[m_ALine.size+20];
if(!line)
return;
for(int j = 0; j <m_ALine.front; j++)
{
line[j].start =m_ALine.position[j].start;
line[j].stop =m_ALine.position[j].stop;
}
if(m_ALine.position)
delete[]m_ALine.position;
m_ALine.position = line;
m_ALine.size+=20;
}
m_ALine.position[m_ALine.front].start =m_Start; //将当前的直线存放到数组之中
m_ALine.position[m_ALine.front].stop =m_Stop;
m_ALine.front++;
}
(2).鼠标左键按下同时移动鼠标,则绘制直线:
voidCDrawLineView::OnMouseMove(UINT nFlags, CPoint point)
{
m_Stop.x = point.x; //每次鼠标移动,会导致直线终点坐标改变
m_Stop.y = point.y;
if(m_LbuttonFlag==1) //当鼠标移动时,如果鼠标左键也是按下,则刷新绘制直线
{
Invalidate(TRUE);
}
}
(3).每次刷新绘制都需要将前面绘制的直线重新绘制到屏幕中:
voidCDrawLineView::OnDraw(CDC* pDC)
{
CDrawLineDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//将存储直线全部绘制出来
for(int i = 0; i < m_ALine.front;i++)
{
pDC->MoveTo(m_ALine.position[i].start);
pDC->LineTo(m_ALine.position[i].stop);
}
//如果鼠标左键按下,则绘制直线
if(m_LbuttonFlag == 1)
{
//绘制直线
pDC->MoveTo(m_Start);
pDC->LineTo(m_Stop);
}
}
(4).由于鼠标移动就刷新屏幕,会出现闪屏,则需要使用内存DC来缓存,关于解决闪屏问题使用缓存DC,请参考其它文章。
- MFC中LButtonDown下拖动鼠标绘制直线
- 在OpenCV中利用鼠标绘制直线
- MFC中使用agg绘制直线
- 拖动鼠标绘制椭圆
- degrafa 鼠标拖动绘制方形
- winfrom-拖动鼠标绘制矩形
- C#Graphics类绘制直线与拖动
- C#Graphics类绘制直线与拖动
- Graphics类绘制直线与拖动
- MFC 鼠标拖动画圆
- MFC 鼠标拖动画圆
- opencv鼠标绘制直线 C++版
- opencv使用鼠标实现直线的绘制
- MFC中画直线
- MFC 鼠标绘制矩形框
- MFC在静态控件上绘制直线
- MFC CDC绘制直线 折现 椭圆 ...
- MFC实现鼠标跟踪画直线
- 递归学习,试下汉罗塔
- linux解决xhost: unable to open display
- javax.servlet.jsp.PageContext cannot be resolved to a type
- The type javax.servlet.ServletContext cannot be resolved. It is indirectly referenced from required
- TCP/IP 三次握手、四次挥手
- MFC中LButtonDown下拖动鼠标绘制直线
- 虚拟内存(一)
- vs助手
- 最通俗的CRC校验原理剖析
- php项目开发遇到的囧事集锦.
- 把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]
- java 替换字符
- [每天一个Linux小技巧] reset
- Multiple markers at this line @Override的解决方法