我正在使用 MFC 在 C++ 中编程。
我想在 UI 完全加载后执行一段代码,所以我把它放在一个 OnTimer 回调中,并在 OnInitDialog 中调用 SetTimer。问题是如何使该计时器只执行一次?
任何帮助,将不胜感激。
我正在使用 MFC 在 C++ 中编程。
我想在 UI 完全加载后执行一段代码,所以我把它放在一个 OnTimer 回调中,并在 OnInitDialog 中调用 SetTimer。问题是如何使该计时器只执行一次?
任何帮助,将不胜感激。
您必须使用 KillTimer 功能,但您只需要小心执行一次计时器。例如,您编写如下代码,
#define TID_ONLY_ONCE WM_USER + 202
void CSampleDlg::OnTimer(UINT_PTR nIDEvent)
{
if(nIDEvent == TID_ONLY_ONCE)
{
KillTimer(TID_ONLY_ONCE);
SomethingLongProcess(pSomeData);
}
CDialog::OnTimer(nIDEvent);
}
如果你设置了timer elapse很快,虽然你调用了KillTimer,'ontimer()'会被执行几次,因为SomethingLongProcess需要很长时间。因此,为了避免这种情况,
我希望这会对你有所帮助。
除了使用计时器,您还可以使用 PostMessage 向自己发布一条消息,这将使待处理的窗口消息队列得到处理。然后你可以在 PostMessage 处理程序中做你想做的事。这样您就不必担心杀死计时器。(见http://msdn.microsoft.com/en-us/library/9tdesxec%28v=vs.80%29.aspx)
第一次调用定时器函数时调用 KillTimer。