如何用鼠标画直线 整个过程中一直显示直线状态,请问高手,如何实现?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if(m_DrawType==1) //画直线 { pDC->MoveTo(m_StartPoint); pDC->LineTo(m_EndPoint); }此段代码写于OnDraw()函数中,m_StartPoint起始点,m_EndPoint终点都是全局变量void CXXXView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default m_StartPoint=point; //起始点为鼠标按下的点 CView::OnLButtonDown(nFlags, point);}void CXXXView::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default m_EndPoint=point; //终止点为鼠标当前位置 Invalidate(); CView::OnMouseMove(nFlags, point);}void CXXXView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default m_EndPoint=point; //终止点为鼠标当前位置 Invalidate(); //刷新界面 CView::OnLButtonUp(nFlags, point);} 主要是看你在什么位置加的画线代码.加在OnPaint中就OK,view的话加在OnDraw中也可以 楼主的意思是要画垂直线和水平线吗?在第二次单击鼠标的CLICK事件里把点击的位置取出来,把X或Y的位置改成第一次点击的位置便可。还是要实现移动鼠标的时候实时更新线条你可以用DC的SETROP2(R2_NOT)来实现。这个是用来画反色的。具体查查这个东东的用法你就知道。很好用的 pDC->MoveTo(X,Y);移到到此pDC->LineTo(X,Y);从上次移到的位置开始,连接直线 到设置的位置。 GDI的做法是pDC->MoveTo(X,Y);直线的起点pDC->LineTo(X,Y);直线的终点GDI+的就更简单的了,只是前提你要有GDI+库。可以去百度GOOGLE一下 使用文档序列化来保存数据,以防刷新的时候原来的图消失http://mmilmf.download.csdn.net/我这有个画图的程序你看下吧,如果还不行的,再给你个简单的例子 只能是把之前画过的点都保存起来,然后每次paint时再把这些点全画出来 看孙鑫的<<VC++深入详解>>,里边介绍的很详细的。楼主还要多看书啊。 你可以保存当前DC,就是从DC中将bitmap数据拿出来,下次画的时候再载入bitmap数据,在载入的基础上再画,没必要保存历史信息,除非你要做撤销操作才需要保存历史信息 CDC*pDC=GetDC(); CRect rect; GetClientRect(&rect); PBYTE pBuffer; pBuffer = new BYTE[rect.Width()*rect.Height()*3]; CBitmap Bmp,*pBmp; Bmp.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height()); CDC memDC; memDC.CreateCompatibleDC(pDC); pBmp=memDC.SelectObject(&Bmp); memDC.BitBlt(rect.left, rect.top, rect.right, rect.bottom, pDC,0,0,SRCCOPY); pBmp=memDC.SelectObject(pBmp); pBmp->GetBitmapBits(rect.Width()*rect.Height()*3,pBuffer); pBuffer内的就是DC上画的RGB数据,至于载入的话可以用CBitmap::SetBitmapBits(),然后再SelectObject来做。 或者干脆就不用取出RGB数据,直接保存Bmp也成。 画在内存DC中,然后每次要画新的线,继续加到内存DC中,再显示到屏幕。其中 ,内存DC实例应一直存在 。 用链表记录点,在OnPaint或OnDraw中遍历链表进行绘制 如何建立一个不停靠的工具条? VC操作word之插入图像后如何让它居中显示呢? 有谁知道怎么实现qq聊天选择表情时出现的表情面板? ChildView中的CEdit控件设置焦点问题 请教组件注册问题!~~~~~~~~~~~ 有谁用VC编过离散生成voronoi图的程序啊? VC中用ODBC连接SQL SERVER,怎么执行存储过程? 用VC发邮件时遇到一些基础的问题请教 怎么在文件尾追加数据? 独占鼠标消息,怎么做(救命啊!!!!!!) 编译错误,求助! 助vc6.0中怎样将对话框中的值传给文本文档,并在视图中输出来
if(m_DrawType==1) //画直线
{
pDC->MoveTo(m_StartPoint);
pDC->LineTo(m_EndPoint);
}
此段代码写于OnDraw()函数中,m_StartPoint起始点,m_EndPoint终点都是全局变量void CXXXView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_StartPoint=point; //起始点为鼠标按下的点
CView::OnLButtonDown(nFlags, point);
}void CXXXView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_EndPoint=point; //终止点为鼠标当前位置
Invalidate();
CView::OnMouseMove(nFlags, point);
}void CXXXView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_EndPoint=point; //终止点为鼠标当前位置
Invalidate(); //刷新界面
CView::OnLButtonUp(nFlags, point);
}
加在OnPaint中就OK,view的话加在OnDraw中也可以
你可以用DC的SETROP2(R2_NOT)来实现。这个是用来画反色的。具体查查这个东东的用法你就知道。很好用的
pDC->MoveTo(X,Y);直线的起点pDC->LineTo(X,Y);直线的终点GDI+的就更简单的了,只是前提你要有GDI+库。可以去百度GOOGLE一下
http://mmilmf.download.csdn.net/我这有个画图的程序你看下吧,如果还不行的,再给你个简单的例子
CRect rect;
GetClientRect(&rect); PBYTE pBuffer;
pBuffer = new BYTE[rect.Width()*rect.Height()*3]; CBitmap Bmp,*pBmp;
Bmp.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height()); CDC memDC;
memDC.CreateCompatibleDC(pDC);
pBmp=memDC.SelectObject(&Bmp);
memDC.BitBlt(rect.left, rect.top, rect.right, rect.bottom, pDC,0,0,SRCCOPY); pBmp=memDC.SelectObject(pBmp);
pBmp->GetBitmapBits(rect.Width()*rect.Height()*3,pBuffer);
pBuffer内的就是DC上画的RGB数据,至于载入的话可以用CBitmap::SetBitmapBits(),然后再SelectObject来做。
或者干脆就不用取出RGB数据,直接保存Bmp也成。
然后每次要画新的线,继续加到内存DC中,再显示到屏幕。
其中 ,内存DC实例应一直存在 。