我想在对话框上点左键,选起点,点右键选终点,画一条直线,可是这样只能画一条啊;现在是这样的:void CParsePicDlg::drawLine()
{
CDC* pDC=GetDC();

pDC->SetROP2(R2_COPYPEN);
//画线
CPen   pen(PS_SOLID,3,RGB(255,0,0));   //在这里设置线型,线宽及颜色   
CPen*   pOldPen;   
pOldPen=pDC->SelectObject   (&pen);  

CRect Recto;
GetClientRect(&Recto);
pDC->MoveTo(cpoint.x + rctPicture.left, cpoint.y + rctPicture.top);
pDC->LineTo(cendpoint.x + rctPicture.left, cendpoint.y + + rctPicture.top);
ReleaseDC(pDC);
}   

解决方案 »

  1.   

    在对话框的OnPaint函数里面调用这个函数!
    另外,这个函数里面,在释放DC前,没有将创建的画笔删除,
    pDC->SelectObject  (pOldPen);  
    pen.DeleteObject();
    ReleaseDC(pDC); 
      

  2.   

    那你继续用鼠标点不就可以画多个线了么。后面的点只要继续用pDC->LineTo就可以连着画了。
      

  3.   

    我是对话框里面调用的这个函数的,可是,如果用鼠标消息的话,在OnPaint调用就不行了:刚才加了
    pen.DeleteObject(); 还是只可以画一条直线
    void CParsePicDlg::OnPaint()
    {
    CPaintDC dc(this); // device context for painting if (IsIconic())
    {
    SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    CDialog::OnPaint();
    } drawLine();
    }
      

  4.   

    我明白了,你实际上只记录了一条线,所以,你只能画出一条
    你必须将所有的线的都记录!然后画的时候,对这些点都画出来!
    你可以定义一个线的结构体
    struct edge{
    CPoint pt1;
    CPoint pt2;
    }
    在你的CParsePicDlg对话框里面,可以保存这个edge的列表!然后,每添加一条线,就在列表里面添加一个edge,画的时候,是从这个列表里面取数据画!
      

  5.   

    你在ondraw中调用 然后用鼠标多点画线 就可以多画了。 你最好加上释放设备函数。
      

  6.   

    想多画的话,可以在内存中生成一个内存的cdc,然后画在这个cdc上面,然后再onpaint的时候把这个cdc的图像bitblt到窗口dc上就可以了................
      

  7.   

    没看懂你的问题 不过按照你的标题的意思应该这样
    pt定义为一个CPoint类型的成员变量
    响应对话框的WM_LBUTTONDOWN消息
    pt.x = point.x;
    pt.y = point.y;
    点击地一下左键的时候记录下第一个点
    点击右键WM_RBUTTONDOWN的消息响应函数中
    CDC* pDC=GetDC(); 

    pDC->SetROP2(R2_COPYPEN); 
    //画线 
    CPen  pen(PS_SOLID,3,RGB(255,0,0));  //在这里设置线型,线宽及颜色  
    CPen*  pOldPen;  
    pOldPen=pDC->SelectObject  (&pen);  


    pDC->MoveTo(pt.x,pt.y); 
    pDC->LineTo(point.x,point.y); 
      

  8.   

    呵呵,这样画的画,你在画的过程中,如果按下ALT+TAB键,估计画的东西又没有了!
      

  9.   

    void CParsePicDlg::OnLButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CString spoint;
    spoint.Format(_T("x:%d y:%d"),point.x - rctPicture.left, point.y - rctPicture.top);
    SetDlgItemText(IDC_MSG, spoint); cpoint.x = point.x - rctPicture.left;
    cpoint.y = point.y - rctPicture.top; Invalidate();
    CDialog::OnLButtonDown(nFlags, point);
    }void CParsePicDlg::OnRButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 cendpoint.x = point.x - rctPicture.left;
    cendpoint.y = point.y - rctPicture.top;
    Invalidate();
    CDialog::OnRButtonDown(nFlags, point);
    }
      

  10.   

    保存所有起点和终点啊,再画每条直线啊,
    如POINT ptStart[100], ptEnd[100];
    int  LineCount = 0; 
    点左键保存起点 ptStart[LineCount],右键保存终点ptEnd[LineCount],LineCount增加1表示多了1条线,
    画时就循环啊
    for(int = 0; i < LineCount; i++)
    {
         起点i到终点i
    }