VC++画直线

machiatto_Job 2010-02-04 09:41:38
不是《VC++深入详解》第四章讲的那种画法
书上讲的是松开鼠标左键之后才显示一条直线。
我想问的是按下鼠标左键就开始画 松开鼠标左键之后形成一条直线
就是开始-附件-画图里的画直线或WORD绘图里的画直线一样的功能。
...全文
589 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
loderunner 2010-02-04
  • 打赏
  • 举报
回复
橡皮筋技术,网上资料很多
Sou2012 2010-02-04
  • 打赏
  • 举报
回复
WM_LBUTTONDOWN 记录起点
WM_LBUTTONUP 记录终点

UP的时候,画一条直线!
m_nNightmire 2010-02-04
  • 打赏
  • 举报
回复
楼主的意思是,根据鼠标移动,实时显示直线最终形状?
那样你每次移动鼠标都要擦除原有背景
admirxue 2010-02-04
  • 打赏
  • 举报
回复
WM_MOUSEMOVE
向立天 2010-02-04
  • 打赏
  • 举报
回复
设置一个标志变量
鼠标左键按下时将其职为真
同时保存鼠标落点作为线段起点
SetCapture
在OnMouseMoving里
当标志变量为真时就绘制一条从起点到当前点的直线
这里注意要擦除先前绘制的直线
鼠标左键抬起的消息中
标志变量置甲
ReleaseCapture

当然具体编程的时候还有一些细节需要处理
不过大概思路就是这样了
hufen2740 2010-02-04
  • 打赏
  • 举报
回复
//WM_MOUSEMOVING中调用这个函数 m_bReDraw DOWN的时候置成TRUE UP的时候为FALSE 你吧矩形画法换成直线画法就可以了
void XXX::DrawDashRectangle(CPoint point)
{
CDC *pDc = GetWindowDC();
CPen pen(PS_DASH,1,(COLORREF)0x0);
CPen* pOldPen = pDc->SelectObject(&pen);
pDc->SetROP2(R2_NOTXORPEN);
if (m_bReDraw)
{
pDc->Rectangle(m_ptTemp.x, m_ptTemp.y, m_nWidth, m_nHeight);
}

m_ptTemp = point;
pDc->Rectangle(m_ptTemp.x, m_ptTemp.y, m_nWidth, m_nHeight);
pDc->SelectObject(&pOldPen);
ReleaseDC(pDc);
}
Eleven 2010-02-04
  • 打赏
  • 举报
回复
WM_MOUSEMOVE
hufen2740 2010-02-04
  • 打赏
  • 举报
回复
你要的不就是弹簧线呗
jianghandaxue 2010-02-04
  • 打赏
  • 举报
回复
把这个消息加上去:WM_MOUSEMOVE事件中先删除前一条线,再画新的线
vclongking 2010-02-04
  • 打赏
  • 举报
回复
开始一样 在WM_LBUTTONDOWN消息里面记录起始坐标 然后直接在WM_MOUSEMOVE里面添加画直线函数
magic7004 2010-02-04
  • 打赏
  • 举报
回复
在WM_LBUTTONDOWN事件中记录起点坐标,然后做一个开始画线的标志
在WM_MOUSEMOVE事件中先删除前一条线,再画新的线
在WM_LBUTTONUP事件中,取消开始画线的标志就可以了。
jianghandaxue 2010-02-04
  • 打赏
  • 举报
回复
你需要的是windows自带的画图工具画直线那样是吧?
如果是这样的话,那么光一个鼠标左键写实现是不够的,你还必须加一个鼠标响应移动的实现,也就是说,当你的鼠标在视图中不断在移动时,直线实时的现实绘画!
machiatto_Job 2010-02-04
  • 打赏
  • 举报
回复
自己做沙发
「已注销」 2010-02-04
  • 打赏
  • 举报
回复
橡皮筋线嘛,用异或笔
wwgddx 2010-02-04
  • 打赏
  • 举报
回复
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
static int a=0;
static int x=0;
static int y=0;
if(GetKeyState(VK_LBUTTON) & 0x80000000)
{

CDC* pDC=GetDC();
if(a == 1)
{
pDC->MoveTo(x, y);
pDC->LineTo(point.x, point.y);
}
a=1;
x=point.x;
y=point.y;
}
else
a=0;
CDialog::OnMouseMove(nFlags, point);
}

这个可以
  • 打赏
  • 举报
回复
橡皮条,SetRop2

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧