比方说,点击按钮就在特定地方画一条线,单击鼠标就在鼠标的坐标那里画一个圈,应该怎样做?

解决方案 »

  1.   

    在相应事件中,在Client DC上面作图,至于怎么划线,画圆,请参照GDI或者GDI+,网上google一下应该会有很多。
      

  2.   

    例子
    http://www.alphasun.org/alphasun/Kinetic/index.htm
      

  3.   

    整个windows也没有那个按钮是专门用来画线的,按钮有事件,在事件响应中自己画线
    CDC::LineTo
      

  4.   

    我是创建基于对话框的工程,作的非常简单,希望对你有点用。void CDrawPicDlg::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting
    CPen *pOldPen;
    if(m_nMode == 0)
    {
    CPen pen(PS_SOLID,2,RGB(0,255,0));
    pOldPen = dc.SelectObject(&pen);
    dc.Arc(m_rcPic,CPoint(m_rcPic.left,m_rcPic.top),CPoint(m_rcPic.left,m_rcPic.top));
    dc.SelectObject(pOldPen);
    }
    if(m_nMode == 1)
    {
    CPen pen(PS_SOLID,2,RGB(0,0,255));
    pOldPen = dc.SelectObject(&pen);
    dc.MoveTo(m_rcPic.left,(m_rcPic.right+m_rcPic.left)/2);
    dc.LineTo(m_rcPic.right,(m_rcPic.right+m_rcPic.left)/2);
    dc.SelectObject(pOldPen);
    }

    }
    void CDrawPicDlg::OnDrawLine() //按钮
    {
    m_nMode = 1;
    InvalidateRect(m_rcPic);
    }void CDrawPicDlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    if(m_rcPic.PtInRect(point))
    {
    m_nMode = 0;
    InvalidateRect(m_rcPic);
    }
    CDialog::OnLButtonDown(nFlags, point);
    }//定义私有变量
    CRect m_rcPic;//
    int m_nMode;//初始化为-1
    //在对话框上放置静态picture控件IDC_PIC,大小自己调整。
    //在OnInitialDialog()中添加
    GetDlgItem(IDC_PIC)->GetWindowRect(m_rcPic);
    ScreenToClient(&m_rcPic);
    现在试试看结果。