延迟 windows 在 mfc 上显示文本
Delaying windows display text on mfc
我正在做基于对话的 MFC 游戏。
在游戏中有一个战斗阶段,我想在屏幕上显示一个小延迟的每个文本,
我试过使用 sleep 也试过 CTime,但两者都只显示每场战斗的最后一个文本......
这是代码示例...
void CDNDPprojectDlg::OnBnClickedAction()
{
CString Damaged;
damage=me->Attack(enemy,WeID);
SDialog.Format(_T("You done %d damage, using %s,\r\n %s has %d HP left"), damage,Damaged,monName,enemy->getHP());
Output.SetWindowTextW(SDialog);
if(enemy->getHP() <1)
{
Won();
return;
}
NextAttack();
if(me->getHP() <1)
{
Died();
return;
}
}
所有 3 个函数的开头都有 Sleep(700)。它会延迟但只显示最后一个
Output.SetWindowTextW(SDialog);
我放的...我猜它是线程的东西,请帮助我。
谢谢
有艰难的路,有容易的路,也有丢人的路。
困难的方法是执行多线程 - 检查 AfxBeginThread,将指针传递给 CNDDPprojectDlg,并在每次睡眠后在那里完成工作。这很难,因为在某一时刻你需要同步你的主线程和你的新线程,当他们访问公共资源时......在那里要学很多东西但在此之前有很多痛苦
另一种方法是使用计时器 SetTimer 并覆盖 OnTimer
第三种方法是使用 Visual Basic 中的 DoEvents 之类的东西(真可惜!)。只需在您完成某些操作后调用它,您的屏幕就会刷新。我将否认向您传递了该代码。
BOOL DoEvents()
{
MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
return FALSE;
}
if (!AfxGetApp()->PreTranslateMessage(&msg))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
return TRUE;
}
祝你好运!
我正在做基于对话的 MFC 游戏。 在游戏中有一个战斗阶段,我想在屏幕上显示一个小延迟的每个文本, 我试过使用 sleep 也试过 CTime,但两者都只显示每场战斗的最后一个文本...... 这是代码示例...
void CDNDPprojectDlg::OnBnClickedAction()
{
CString Damaged;
damage=me->Attack(enemy,WeID);
SDialog.Format(_T("You done %d damage, using %s,\r\n %s has %d HP left"), damage,Damaged,monName,enemy->getHP());
Output.SetWindowTextW(SDialog);
if(enemy->getHP() <1)
{
Won();
return;
}
NextAttack();
if(me->getHP() <1)
{
Died();
return;
}
}
所有 3 个函数的开头都有 Sleep(700)。它会延迟但只显示最后一个
Output.SetWindowTextW(SDialog);
我放的...我猜它是线程的东西,请帮助我。
谢谢
有艰难的路,有容易的路,也有丢人的路。
困难的方法是执行多线程 - 检查 AfxBeginThread,将指针传递给 CNDDPprojectDlg,并在每次睡眠后在那里完成工作。这很难,因为在某一时刻你需要同步你的主线程和你的新线程,当他们访问公共资源时......在那里要学很多东西但在此之前有很多痛苦
另一种方法是使用计时器 SetTimer 并覆盖 OnTimer
第三种方法是使用 Visual Basic 中的 DoEvents 之类的东西(真可惜!)。只需在您完成某些操作后调用它,您的屏幕就会刷新。我将否认向您传递了该代码。
BOOL DoEvents()
{
MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
return FALSE;
}
if (!AfxGetApp()->PreTranslateMessage(&msg))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
return TRUE;
}
祝你好运!