标准SDI应用程序,加入启动画面后,初始化函数中的AfxMessageBox("")与启动画面同时关闭?为什么?

eeixy2000 2004-04-10 11:24:30
我用VC6 的ClassWizard创建标准的SDI应用程序(视图类),然后使用Project>>...增加标准的Splash Screen组件到程序中(全都按照默认设置),现在问题出现了:
我在视图类(CFormView)的初始化函数中添加如下代码:
AfxMessageBox("OOO");
但是该提示语对话框根本不要我点击"确定"按钮就和启动画面一起自动关闭.
请问这是为什么?
void CTKM8View::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit(FALSE);

// 连接到数据库
LinkToDatabase();
...............................
AfxMessageBox("OOO");
}
...全文
26 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangcrony 2004-04-10
语句的地方不对吧?放到OnPaint函数体里面看看!
回复
skyxie 2004-04-10
从设计上来说,我觉得你应该让Splash窗口消失之后再弹出那个MessageBox
回复
zhujianping_es 2004-04-10
Hehe !
Easy !Just change:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
........
CSplashWnd::ShowSplashScreen(this);
}

to this:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
........
CSplashWnd::ShowSplashScreen(NULL);
}


That would be Ok!

回复
关注
回复
smallbull 2004-04-10
应该不是加Splash的问题
回复
yxlijinzhu 2004-04-10
可能是由于线程方面的原因.
因为, 启动画面是异步的, 而MessageBox会阻断调用线程, 但他自己有自己的消息泵, 启动画面返回是可能会对调用线程有一些影响, 从而间接影响了MessageBox, 因为他们都是在一个线程中产生的(你的程序是这样的吧).

具体我也不清楚, 只是感觉. 帮你顶一下.

但是要解决这个问题, 你可以另开一个线程来启动那个启动画面, 这样虽然很笨, 但我想再也不会出现你的那个问题了.
回复
eeixy2000 2004-04-10
但是如果不加启动画面,在同样的地方使用AfxMessageBox("OOO");就不会出现问题
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告