设为首页 加入收藏

TOP

在对话框显示出来后立即执行一段代码
2014-11-23 23:39:53 来源: 作者: 【 】 浏览:7
Tags:对话 显示 出来 立即 执行 代码

最近在做一个项目,在创建一个子对话框的时候,由于在OnInitDialog()初始化所要执行的代码量比较大,导致初始化很慢,要2秒左右对话框才能显示出来...所以想把部分代码在对话框显示出来之后再执行,在网上找了很多资料,总结了下面两种办法,一种是在OnInitDilalog()中设定一个定时器,还有一种是再OnInitDialog()中PostMessage()在添加一个自定义的消息在消息队列中等待对话框初始化之后从消息队列中读取消息执行代码。、、、、

1.在OnInitDialog返回之前创建一个只报时一次的定时器,在OnTimer里执行代码

BOOLMyAppDlg::OnInitDialog()

{

…………………………

// TODO: Add extra initialization here

SetTimer(m_nTimerID, 100, NULL);

returnTRUE; // return TRUE unless you set the focus to a control

}

voidMyAppDlg::OnTimer(UINT_PTRnIDEvent)

{

if(nIDEvent == m_nTimerID)

{

// 只执行一次,所以一报时就Kill掉了

KillTimer(m_nTimerID);

m_nTimerID = 0;

AfxMessageBox(_T("Hello MFC"));

return;

}

CDialog::OnTimer(nIDEvent);

}

2.在OnInitDialog返回之前post一个自定义的消息,在消息的相应函数里执行代码

#define WM_MY_PRIVATE WM_USER + 1551

BOOLMyAppDlg::OnInitDialog()

{

…………………………

// TODO: Add extra initialization here

PostMessage(WM_MY_PRIVATE);

returnTRUE; // return TRUE unless you set the focus to a control

}

// 当然,消息映射表里得加上一项

// ON_MESSAGE(WM_MY_PRIVATE, &CdummyDlg::OnPrivateMessage)

LRESULTMyAppDlg::OnPrivateMessage(WPARAM,LPARAM)

{

AfxMessageBox(_T("Hello MFC"));

return0;

}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇DOS下显示8位256色BMP位图 下一篇网络数据处理缓冲区和缓冲池实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: