c#中ControlPaint.DrawReversibleFrame(thisform.RectangleToScreen(SelectRect), Col
答案:2 悬赏:70 手机版
解决时间 2021-03-07 16:45
- 提问者网友:山高云阔
- 2021-03-06 18:43
c#中ControlPaint.DrawReversibleFrame(thisform.RectangleToScreen(SelectRect), Color.Black, FrameStyle.Dashed);这一句是什么意思???、
最佳答案
- 五星知识达人网友:痴妹与他
- 2021-03-06 19:30
这种现象我也遇到过,主要的原因是因为窗体上的控件太多,而且过多的设置了控件的Ancher属性,使窗体重绘的控件过多,或者是设置窗体的TransparencyKey的属性,我的解决方案就是用的画虚框的方法,那个程序已经找不着了,给你简单写了个右边框拉伸的,代码如下
//不要设置窗体的TransparencyKey的属性
Rectangle bolderRight;
Rectangle drawRect;
bool draw = false;
int bolderWidth = 4;
int lastWidth = -32000;
private void Form1_Load(object sender, EventArgs e)
{
bolderRight = new Rectangle(this.Width - bolderWidth, 0, bolderWidth, this.Height);
drawRect = new Rectangle(this.Location, this.Size);
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left || bolderRight.Contains(e.Location))
{
this.Cursor = Cursors.SizeWE;
draw = true;
}
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (bolderRight.Contains(e.Location))
this.Cursor = Cursors.SizeWE;
else
this.Cursor = Cursors.Default;
if (draw)
{
if (lastWidth != -32000)//擦出上一次绘制的边框
ControlPaint.DrawReversibleFrame(new Rectangle(drawRect.Location, new Size(lastWidth, drawRect.Height)), Color.Black, FrameStyle.Dashed);
drawRect.Width = MousePosition.X - this.Left;
ControlPaint.DrawReversibleFrame(drawRect, Color.Black, FrameStyle.Dashed);
lastWidth = drawRect.Width;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
draw = false;
ControlPaint.DrawReversibleFrame(drawRect, Color.Black, FrameStyle.Dashed);
this.Size = drawRect.Size;
lastWidth = -32000;
}
private void Form1_Resize(object sender, EventArgs e)
{
bolderRight = new Rectangle(this.Width - bolderWidth, 0, bolderWidth, this.Height);
drawRect = new Rectangle(this.Location, this.Size);
}
//不要设置窗体的TransparencyKey的属性
Rectangle bolderRight;
Rectangle drawRect;
bool draw = false;
int bolderWidth = 4;
int lastWidth = -32000;
private void Form1_Load(object sender, EventArgs e)
{
bolderRight = new Rectangle(this.Width - bolderWidth, 0, bolderWidth, this.Height);
drawRect = new Rectangle(this.Location, this.Size);
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left || bolderRight.Contains(e.Location))
{
this.Cursor = Cursors.SizeWE;
draw = true;
}
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (bolderRight.Contains(e.Location))
this.Cursor = Cursors.SizeWE;
else
this.Cursor = Cursors.Default;
if (draw)
{
if (lastWidth != -32000)//擦出上一次绘制的边框
ControlPaint.DrawReversibleFrame(new Rectangle(drawRect.Location, new Size(lastWidth, drawRect.Height)), Color.Black, FrameStyle.Dashed);
drawRect.Width = MousePosition.X - this.Left;
ControlPaint.DrawReversibleFrame(drawRect, Color.Black, FrameStyle.Dashed);
lastWidth = drawRect.Width;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
draw = false;
ControlPaint.DrawReversibleFrame(drawRect, Color.Black, FrameStyle.Dashed);
this.Size = drawRect.Size;
lastWidth = -32000;
}
private void Form1_Resize(object sender, EventArgs e)
{
bolderRight = new Rectangle(this.Width - bolderWidth, 0, bolderWidth, this.Height);
drawRect = new Rectangle(this.Location, this.Size);
}
全部回答
- 1楼网友:轻雾山林
- 2021-03-06 20:53
rect src = new rect();// 图片
rect dst = new rect();// 屏幕
src.left = bx;
src.top = by;
src.right = bx + w;
src.bottom = by + h;
dst.left = x;
dst.top = y;
dst.right = x + w;
dst.bottom = y + h;
canvas.drawbitmap(blt, src, dst, null);
应该能看懂吧
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯