为了让用户等待的时候不至于闲着慌,我就弄了启动画面,用一个线程去启动这个画面,然后让主进程继续初始化程序: // main dialog AfxBeginThread(InitProgramThread, this); ShowWindow(SW_HIDE); // init the toolbar initToolBar(); // init member variables initClassMemberVariables(); // init vedio play initVedioPlay(); 其中InitProgramThread代码如下: UINT CUltrasonicSystemDlg::InitProgramThread(LPVOID param) { CWzdSplash wndSplash; wndSplash.Create(IDB_SPLASH); wndSplash.CenterWindow(); wndSplash.UpdateWindow(); Sleep(3000); ::PostMessage(AfxGetMainWnd()->GetSafeHwnd(),WM_SHOW_DIALOG,NULL,NULL); wndSplash.DestroyWindow(); return NULL; } 发送 WM_SHOW_DIALOG 后,调用函数: LRESULT CUltrasonicSystemDlg::OnShowMainWindow(WPARAM wParam, LPARAM lParam) { ShowWindow(SW_MAX); return 0; } 程序启动后,消息也会在子线程结束后发送给主线程,但是每次都是子线程里面的启动画面还没有结束,主对话框就弹出来了,我上面明明把它隐藏了的。 |
|