最近一直在做程序,心烦了就想弄点好玩的,^_^
首先声明,这是个很菜的东东,高手不要见笑~
看到很多软件在打开的时候,都有一个很炫的入场画面,然后才进入主窗口,我也来也做一个~
先在resource中添加一个dialog,当然,同时为它添加一个类LoginDlg,然后在主对话框的OnInitDialog()函数里创建一个该类的对象LoginDlg login,然后,就是重点了,因为要实现自动关闭,在这里需要创建一个线程,因为login.DoModal()函数会阻塞主进程,如果你直接使用login.OnCancel()的话,会提示你非法访问受保护成员,如果你直接login.PostMessage(WM_CLOSE)的话,由于主线程阻塞了,所以你无法post这个信息。
在线程函数里,用Sleep()设置你想要的停留时间,然后PostMessage(WM_CLOSE)就可以关闭入场对话框了。
//在OnInitDialog()函数里初始化,并用DoModal()等待
Ddlg logindlg;
Ddlg* t=&logindlg;
CreateThread(NULL,0,MyLogin,t,0,0);
logindlg.DoModal();
//线程函数
DWORD WINAPI MyLogin(LPVOID lpParam){
Ddlg* tmp=(Ddlg *)lpParam;
Sleep(1000);
tmp->PostMessage(WM_CLOSE);
return 0;
}
需要注意的是线程函数不能作为类成员函数,因此要在类外面实现,所以需要一个指向入场对话框的指针,他是通过lpParam参数来传递的。
首先声明,这是个很菜的东东,高手不要见笑~
看到很多软件在打开的时候,都有一个很炫的入场画面,然后才进入主窗口,我也来也做一个~
先在resource中添加一个dialog,当然,同时为它添加一个类LoginDlg,然后在主对话框的OnInitDialog()函数里创建一个该类的对象LoginDlg login,然后,就是重点了,因为要实现自动关闭,在这里需要创建一个线程,因为login.DoModal()函数会阻塞主进程,如果你直接使用login.OnCancel()的话,会提示你非法访问受保护成员,如果你直接login.PostMessage(WM_CLOSE)的话,由于主线程阻塞了,所以你无法post这个信息。
在线程函数里,用Sleep()设置你想要的停留时间,然后PostMessage(WM_CLOSE)就可以关闭入场对话框了。
//在OnInitDialog()函数里初始化,并用DoModal()等待
Ddlg logindlg;
Ddlg* t=&logindlg;
CreateThread(NULL,0,MyLogin,t,0,0);
logindlg.DoModal();
//线程函数
DWORD WINAPI MyLogin(LPVOID lpParam){
Ddlg* tmp=(Ddlg *)lpParam;
Sleep(1000);
tmp->PostMessage(WM_CLOSE);
return 0;
}
需要注意的是线程函数不能作为类成员函数,因此要在类外面实现,所以需要一个指向入场对话框的指针,他是通过lpParam参数来传递的。