引用
wangjianlif1 的 VC++创建简单的启动窗口
创建类CLogoThread(可以用其他的名字) :BaseClass为CwindThread
顺便说一下基类:MFC用来封装线程的,包括UI线程和工作者线程。每个MFC程序至少使用一个CwindThread派生类。MFC程序员熟知的CwinApp类和从其继承的用户接口线程的例子就从这里派生的。它的几个类成员函数有:InitInstance()初始化函数,Exitinstance()以及run()三个虚函数。MSDN中有更详细的介绍,大家可以看一下。
好,开始定义一些变量和函数:
宏定义:#ifndef _SPLASH_H_
#define _SPLASH_H_
#include “***。h” //调用要启动窗口的头文件 根据实际情况改变该路径
在公有变量中声明类成员函数
Void HideSplash();
声明一个protected对话框指针
( ××× * m_p×××) ×××为你定义的要启动的对话框类的名字
在类CLogoThread的InitInstance函数中初始化,加上代码:
::AttachThreadInput(m_nThreadID, //欲连接线程的标识符(ID)
AfxGetApp()->m_nThreadID, //与idAttach线程连接的另一个线程的标识符
true ); //TRUE(非零)连接,FALSE撤消连接
m_p×××=new C×××;
m_p×××->Create(IDD_***); //IDD_***启动窗口的ID
m_p×××->ShowWindow(SW_SHOW); //在这个用户界面线程中创建对话框
void CLogoThread::HideSplash() //定义HideSplash函数
{
m_p×××->SendMessage(WM_CLOSE);
}
在ExitInstance()中添加如下代码:
m_pL×××->DestroyWindow();
delete m_p×××; //自动删除构造的UI线程对象
然后在C***App类中添加如下代码,记得调用ClogoThread头文件
初始化InitInstance函数加上
m_pLogoThread = (CLogoThread*)AfxBeginThread(RUNTIME_CLASS(CLogoThread), THREAD_PRIORITY_NORMAL, 0, 0);
在类public中声明指针:ClogoThread * m_pLogoThread;
启动窗口时在主窗口创建之前产生,所以启动窗口有一定的时间限制,应该在主窗口初始化中加载,在主窗口On
initDialog中加上代码:
::Sleep(1500); //启动时间
if ( ((C***App*)AfxGetApp())->m_pLogoThread != NULL)
((C***App*)AfxGetApp())->m_pLogoThread->HideSplash();
//在创建了主窗口,并初始化了各个子窗口后,自动隐藏启动窗口
说的不知道清楚不,整理的也不是很好,有错误的地方希望大家能够指出 ,在此谢谢了!!
评论