Little Painter Step by Step-Day 9
来源:互联网 发布:淘宝照片尺寸规格 编辑:程序博客网 时间:2024/06/05 18:40
第九天:(目标:SplashForm)
今天我们要做的是给程序添加一个SplashForm,因为如果程序的启动需要load的component比较多,我们就需要让主窗口被show出来之前处理这些load的动作,但是这段时间我们需要让用户知道程序已经开始在启动,这就是需要SplashForm的原因。
SplashForm的特点是,它是一个没有标题栏的窗口,一般显示一幅图片。因此我们可以在App工程中添加一个SplashForm,它继承自Form,BorderStyle为None,拥有一副背景图,并显示在屏幕中央。
在LittlePainterStepbyStepApp中,我们会开启一个线程来显示SplashForm,并做内核初始化的工作,代码如下:
class LittlePainterStepbyStepApp
{
/// <summary>
/// Enter point of the program
/// </summary>
[STAThread]
public static void
{
Application.EnableVisualStyles();
LittlePainterStepbyStepApp app = new LittlePainterStepbyStepApp();
Thread startupThread = new Thread(new ThreadStart(app.Initialize));
startupThread.Start();
startupThread.Join();
ApplicationForm appForm = new ApplicationForm();
Application.Run(appForm);
}
private void Initialize()
{
try
{
m_SplashForm = new SplashForm();
m_SplashForm.Show();
CoreImplementation core = new CoreImplementation();
core.Init();
Core.CoreImplement = (ICore)core;
m_SplashForm.Close();
}
catch
{
m_SplashForm.Dispose();
m_SplashForm = null;
Application.Exit();
}
}
private SplashForm m_SplashForm;
startupThread.Join()保证了我们开启的这个线程执行完毕后,主线程才继续运行
当内核初始化时发生了异常,我们就直接退出。
这里还有一个问题,就是当SplashForm关闭后,主窗口并没有显示出来。我们需要给ApplicationForm添加一句
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.Activate(); // Active main window
InitializeControls();
}
就完成了。
- Little Painter Step by Step-Day 9
- Little Painter Step by Step-Day 1
- Little Painter Step by Step-Day 2
- Little Painter Step by Step-Day 3
- Little Painter Step by Step-Day 4
- Little Painter Step by Step-Day 5
- Little Painter Step by Step-Day 6
- Little Painter Step by Step-Day 7
- Little Painter Step by Step-Day 8
- NHibernate Step by Step
- OGRE step by step
- step by step
- MinGW Step by Step
- 大杂烩---Step by Step
- sphinx4 STEP BY STEP
- EJB step by step
- NHibernate Step by Step
- Django Step by Step
- 关于Debug和Release之本质区别
- 轻松实现一个操作ini文件的类
- C#经典算法集--百钱买百鸡
- VC通用控件编程之CList控件
- Turbolinux中实现负载均衡的方法
- Little Painter Step by Step-Day 9
- 负载均衡软件实现方式之一 - URL重定向方式
- VC通用控件编程之CImageList控件
- 软件与硬件负载均衡的比较
- 使用VC6.0实现窗口的任意分割
- vc自定义消息的发送与接收的方法实现
- VC++6.0编译环境介绍
- WinSock学习笔记
- VC6.0编译器参数设置