日期:2014-05-18  浏览次数:20788 次

关于画图的2个问题
1,当选择form1的按钮时怎样可以在form2的picturebox中画图?应该怎样创建picturebox的grahics对象?

2,怎样实现图像的整体、部分选取,复制?并且在选取时被选中的区域有个虚线框,在复制完后虚线框消失?

请高手们不吝赐教 最好有代码 谢谢!

------解决方案--------------------
使用消息,或者事件

------解决方案--------------------
继承PictureBox控件,然后添加类似如下的代码:


C# code

//鼠标拖动的虚框实现
private Point m_StartPoint;
private Point m_LastPoint;

protected override void OnMouseDown(MouseEventArgs e)
{
    base.OnMouseDown(e);
    this.m_StartPoint = e.Location;
    m_LastPoint = this.m_StartPoint;
}
protected override void OnMouseUp(MouseEventArgs e)
{
    base.OnMouseUp(e);
    Point endPoint = e.Location;
    int l = m_LastPoint.X > this.m_StartPoint.X ? this.m_StartPoint.X : m_LastPoint.X;
    int t = m_LastPoint.Y > this.m_StartPoint.Y ? this.m_StartPoint.Y : m_LastPoint.Y;
    int r = m_LastPoint.X > this.m_StartPoint.X ? m_LastPoint.X : this.m_StartPoint.X;
    int b = m_LastPoint.Y > this.m_StartPoint.Y ? m_LastPoint.Y : this.m_StartPoint.Y;

    Rectangle rect = Rectangle.FromLTRB(l, t, r, b);
    ControlPaint.DrawReversibleFrame(this.RectangleToScreen(rect), SystemColors.Highlight, FrameStyle.Dashed);
}
protected override void OnMouseMove(MouseEventArgs e)
{
    base.OnMouseMove(e);
    if (e.Button == MouseButtons.Left)
    {
        Point endPoint = e.Location;
        int l = m_LastPoint.X > this.m_StartPoint.X ? this.m_StartPoint.X : m_LastPoint.X;
        int t = m_LastPoint.Y > this.m_StartPoint.Y ? this.m_StartPoint.Y : m_LastPoint.Y;
        int r = m_LastPoint.X > this.m_StartPoint.X ? m_LastPoint.X : this.m_StartPoint.X;
        int b = m_LastPoint.Y > this.m_StartPoint.Y ? m_LastPoint.Y : this.m_StartPoint.Y;

        Rectangle rect = Rectangle.FromLTRB(l, t, r, b);
        ControlPaint.DrawReversibleFrame(this.RectangleToScreen(rect), SystemColors.Highlight, FrameStyle.Dashed);

        int _l = endPoint.X > this.m_StartPoint.X ? this.m_StartPoint.X : endPoint.X;
        int _t = endPoint.Y > this.m_StartPoint.Y ? this.m_StartPoint.Y : endPoint.Y;
        int _r = endPoint.X > this.m_StartPoint.X ? endPoint.X : this.m_StartPoint.X;
        int _b = endPoint.Y > this.m_StartPoint.Y ? endPoint.Y : this.m_StartPoint.Y;

        Rectangle _rect = Rectangle.FromLTRB(_l, _t, _r, _b);
        ControlPaint.DrawReversibleFrame(this.RectangleToScreen(_rect), SystemColors.Highlight, FrameStyle.Dashed);
        m_LastPoint = endPoint;
    }
}

------解决方案--------------------
上面 说得很详细了,虚线筐就是用鼠标事件,draw一个矩形出来。然后不用的时候再重新画这个图片。