VC++如何实现 弹出窗口,然后等窗口关闭后再执行剩下的代码?

我现在需要做一个类似于MessageBox的窗口,只不过需要显示图片,所以就自己CreateWindow新建了一个窗口,代码类似这样:{hwndNew=新建窗口...;U... 我现在需要做一个类似于MessageBox的窗口,只不过需要显示图片,所以就自己CreateWindow新建了一个窗口,
代码类似这样:

hwndNew=新建窗口...;
UpdateWindow(hwnd);
ShowWindow(hwnd,SW_SHOW);
while(IsWindow(hwndNew))
{
}
其他的代码...

但是这样的话,调试的时候会发现程序一直卡在while里面……新窗口也显示不出来,请问该怎么弄才能让窗口显示出来?
展开
 我来答
zhccsd
2013-08-08
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
如果是模态对话框就简单了
CxxDlg dlg;
if(dlg.DoModal()==IDOK || dlg.DoModal()==IDCANCEL)
{
//你的代码
}
非模态的话,有两个思路,可以在子对话框关闭的时候给父窗口发送消息
CxxDlg dlg(父对话框的句柄);
if(!dlg.m_hWnd) dlg.Create(IDD_XXX);
dlg.ShowWIndow(SW_SHOW);
子对话框关闭的时候
::SendMessage(父对话框句柄,WM_XX,0,0);
再自定义消息去接收就好了,这种方法还是比较麻烦的

另一种思路是付对话框去监测对话框,但是不要用while,用了while会占满CPU的一个核
用OnTimer去找,
首先启动对话框,并SetTimer(1,100,NULL);//间隔(第二个参数,单位是毫秒)可以改小一点,但貌似最小是10ms,小于10跟10一样
OnTimer()
{
HWND wnd;
wnd=::FindWindow(NULL,_T("子对话框"));
if(wnd)
{
//还在运行
}
else
{
//已经关闭了,可以执行你的代码了
}
}
jimy1
2013-08-08
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
是不是要做启动画面?,下面是我参考别人代码自己整理的笔记
1.定义继承自普通窗口类的启动窗口类,如:
class CSplashWnd : public CWnd
2.截获应用程序的BOOL CJustechApp::InitInstance()消息,在消息响应开头:
CSplashWnd * psplash=new CSplashWnd; //动态分配一个类对象
psplash->ShowWindow(m_nCmdShow); //显示窗口
Sleep(2500); //等待2500ms,即启动窗口显示2500ms
3.在启动窗口创建的时候:
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
CenterWindow(); //让窗口居中显示
SetTimer(6,3000,NULL); //设定一个3s的定时器
AnimateWindow(GetSafeHwnd(),1200,AW_BLEND); //窗口显示时的渐隐效果
return 0;
}
4.响应擦除窗口背景的消息:
BOOL CSplashWnd::OnEraseBkgnd(CDC* pDC)
{
HINSTANCE happ=::GetModuleHandle(NULL);
HBITMAP hbit=::LoadBitmap(happ,MAKEINTRESOURCE(IDB_SPLASH));
HDC hdc=::CreateCompatibleDC(pDC->GetSafeHdc());
HBITMAP hbmpOld = (HBITMAP) ::SelectObject(hdc, hbit);
::BitBlt(pDC->GetSafeHdc(),0,0,600,320,hdc,0,0,SRCCOPY);
::SelectObject(hdc,hbmpOld);
::DeleteObject(hbit);
::DeleteDC(hdc);
return CWnd::OnEraseBkgnd(pDC);
}
5.定时时间到后响应:
void CSplashWnd::OnTimer(UINT nIDEvent)
{
KillTimer(6); //关闭定时器
PostMessage(WM_CLOSE); //发送关闭窗口的消息
CWnd::OnTimer(nIDEvent);
}
6.响应关闭窗口的消息:
void CSplashWnd::OnClose()
{
AnimateWindow(GetSafeHwnd(),800,AW_HIDE|AW_BLEND); //关闭窗口时的渐隐效果
CWnd::OnClose();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-08
展开全部
这两段分开写。一个函数写现实窗口。然后定义一个函数写while,当关闭窗口时,向子窗口发消息,调用while
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式