带动画矩阵的复活节彩蛋惊喜






1.56/5 (9投票s)
2007年3月28日

29024

425
带动画矩阵的复活节彩蛋惊喜
下载 LTAniMatrix_ThreadSafe.zip - 1,901.5 KB
引言
标题已经说明了一切:一个彩蛋惊喜的想法。
背景
你看过《黑客帝国》吗?非常好的科幻电影。
使用代码
public partial class CLTAniMatrix : Panel { .. protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); if (mbFreeze) return; Graphics g = e.Graphics; if (mbStartOver == true) { mbStartOver = false; clockingBgkWorker.CancelAsync(); if (mbClearBgk) ClearPanel(g); else g.DrawImage(mBkImg, this.ClientRectangle); mStartOverSignal.Set(); if (mbShowDebug) { DrawDebugInfo(g); } return; } if (mbClearBgk) ClearPanel(g); else g.DrawImage(mBkImg, this.ClientRectangle); DropMatrixChars(g); DropMatrixClearChars(g); DrawBouncingLogo(g); if (mbShowDebug) { DrawDebugInfo(g); } } private void clockingBgkWorker_DoWork(object sender, DoWorkEventArgs e) { if (clockingBgkWorker.CancellationPending) return; DoPlaySound(); bool waitresult = false; while (clockingBgkWorker.CancellationPending == false) { clockingBgkWorker.ReportProgress(99); Thread.Sleep(10); waitresult = mStartOverSignal.WaitOne(mPaintInterval, true); if (waitresult == true) break; } } private void clockingBgkWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.Invalidate(false); } private void clockingBgkWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { mSoundPlayer.Stop(); InitMatrixChars(); mMaxCharsToClear.Clear(); if (mbFreeze) { mbStartOver = true; return; } mbStartOver = false; WorkerRun(); } ... }
一个扩展 Panel 的组件。只需将其拖放到窗体上即可。当不再需要时,将矩阵可见性设置为 false。