C# 绘制三个实心圆 并放大缩小 求大神指导

qq_42023153 2018-04-20 05:38:22
在这个程序上面画出三个叠加的实心圆,都在屏幕最中央,最外面两个圆可以实现放大缩小




namespace CIE1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

int size = 30;
int A = 255;
Point p = Point.Empty;
private void panel1_Paint(object sender, PaintEventArgs e)
{
var g = e.Graphics;
g.TranslateTransform(panel1.Width / 2, panel1.Height / 2);//把坐标原点移到 panel 的中心
Brush Brush = new SolidBrush(Color.FromArgb(A, 255, 255, 255));
g.FillEllipse(Brush, p.X - size, p.Y - size, size + size, size + size);


}

private void Form2_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.A:
p.X -= 10;
break;
case Keys.D:
p.X += 10;
break;
case Keys.W:
p.Y -= 10;
break;
case Keys.S:
p.Y += 10;
break;
default:
break;

}
Invalidate();
}

private void Form2_KeyUp(object sender, KeyEventArgs e)
{
if (Keys.Up == e.KeyCode)
{
size = size + 5;
}
else if (Keys.Down == e.KeyCode)
{
size = size - 5;
}
if (Keys.Right == e.KeyCode)
{
if (A <= 250)
A = A + 5;
}
else if (Keys.Left == e.KeyCode)
{
A = A - 5;
}
panel1.Invalidate();
}
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
int WM_KEYDOWN = 256;
int WM_SYSKEYDOWN = 260;
if (msg.Msg == WM_KEYDOWN | msg.Msg == WM_SYSKEYDOWN)
{
switch (keyData)
{
case Keys.Escape:
this.Close();//esc关闭窗体
break;
}
}
return false;
}
[DllImport("user32.dll", EntryPoint = "ShowCursor", CharSet = CharSet.Auto)]
public static extern void ShowCursor(int status);

private void panel1_MouseEnter(object sender, EventArgs e)
{
ShowCursor(0);
}

private void panel1_MouseLeave(object sender, EventArgs e)
{
ShowCursor(1);
}

private void Form2_Load(object sender, EventArgs e)
{

}
}
}
...全文
1141 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你是要透明设定,如果在同一个位置画图,后面的图肯定会将前面的图给覆盖的
nry19871012 2018-04-21
  • 打赏
  • 举报
回复

//这个绘制函数你不是在画圆么?在里面再画呀
 private void panel1_Paint(object sender, PaintEventArgs e)
        {
            var g = e.Graphics;
            g.TranslateTransform(panel1.Width / 2, panel1.Height / 2);//把坐标原点移到 panel 的中心
            Brush Brush = new SolidBrush(Color.FromArgb(A, 255, 255, 255));
            g.FillEllipse(Brush, p.X - size, p.Y - size, size + size, size + size);
//再用 g.FillEllipse画一个就可以了,只是坐标计算的问题。

            
        }
xuzuning 2018-04-21
  • 打赏
  • 举报
回复
大的先画,小的后画,颜色要不同
qq_42023153 2018-04-21
  • 打赏
  • 举报
回复
nry19871012,但是在运行的时候就只会有一个圆显示,其他的圆都不显示,那该咋办?
qq_42023153 2018-04-20
  • 打赏
  • 举报
回复
我是新手,一个就已经极限了,求这位大神指导一下啊
xuzuning 2018-04-20
  • 打赏
  • 举报
回复
会画一个,就会画两个、三个、一百个

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧