应用程序: 我正在写一个小游戏,教会用户阅读音乐笔记。游戏很简单。该应用程序显示一个注释,我的小女儿(目标用户)应该点击与该注释匹配的WinForm GUI上的模拟键盘键。她有1分钟可以获得尽可能多的好点击。计算成功和失败。
任务: 当她点击一个好/坏的键盘键时,我想立即确认她是对还是错而不中断播放。我的计划是显示一个OK或FAILED位图逐渐淡出并在~2秒内变得完全透明。将位图淡出是一种很好的方法,可以鼓励用户专注于下一个音符而不再烦扰先前的结果。
技术问题: 如何在具有透明度的Windows窗体上显示位图?或者您是否有其他非侵入性,易于实现的想法让用户知道当前的好/坏选择?
答案 0 :(得分:7)
正如dylantblack所说,WPF为您提供了更好的工具。如果您选择使用Windows窗体,这是一个简单的方法,使用计时器淡出图像。设置一个你喜欢的频率的计时器。启动计时器,每次增加alpha,并使用增加的alpha通道值绘制白色或任何表单颜色。
int alpha = 0;
...
private void timer1_Tick(object sender, EventArgs e)
{
if (alpha++ < 255)
{
Image image = pictureBox1.Image;
using (Graphics g = Graphics.FromImage(image))
{
Pen pen = new Pen(Color.FromArgb(alpha, 255, 255, 255), image.Width);
g.DrawLine(pen, -1, -1, image.Width, image.Height);
g.Save();
}
pictureBox1.Image = image;
}
else
{
timer1.Stop();
}
}
答案 1 :(得分:3)
在WinForms中,您需要使用计时器或其他东西来设置OK或FAILED控件的不透明度,以使其淡出,或者使用GDI +手动绘制它。
如果您还在使用.NET 3.5,我建议使用WPF,这样做更容易。
例如,您可以查看Scott Hanselman's Baby Smash应用,它是开源的,并且具有类似于淡入淡出内容的概念。