不是《VC++深入详解》第四章讲的那种画法
书上讲的是松开鼠标左键之后才显示一条直线。
我想问的是按下鼠标左键就开始画 松开鼠标左键之后形成一条直线
就是开始-附件-画图里的画直线或WORD绘图里的画直线一样的功能。

解决方案 »

  1.   

    你需要的是windows自带的画图工具画直线那样是吧?
    如果是这样的话,那么光一个鼠标左键写实现是不够的,你还必须加一个鼠标响应移动的实现,也就是说,当你的鼠标在视图中不断在移动时,直线实时的现实绘画!
      

  2.   

    在WM_LBUTTONDOWN事件中记录起点坐标,然后做一个开始画线的标志
    在WM_MOUSEMOVE事件中先删除前一条线,再画新的线
    在WM_LBUTTONUP事件中,取消开始画线的标志就可以了。
      

  3.   

    开始一样 在WM_LBUTTONDOWN消息里面记录起始坐标 然后直接在WM_MOUSEMOVE里面添加画直线函数
      

  4.   

    把这个消息加上去:WM_MOUSEMOVE事件中先删除前一条线,再画新的线 
      

  5.   

    //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);
    }
      

  6.   

    设置一个标志变量
    鼠标左键按下时将其职为真
    同时保存鼠标落点作为线段起点
    SetCapture
    在OnMouseMoving里
    当标志变量为真时就绘制一条从起点到当前点的直线
    这里注意要擦除先前绘制的直线
    鼠标左键抬起的消息中
    标志变量置甲
    ReleaseCapture当然具体编程的时候还有一些细节需要处理
    不过大概思路就是这样了
      

  7.   

    WM_LBUTTONDOWN 记录起点
    WM_LBUTTONUP 记录终点UP的时候,画一条直线!
      

  8.   

    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);
    }这个可以