Method to allow abort of long processes
Posted
by Ken Sherman
on December 15th, 1999
This is a simple way to abort from a long computation if the escape key is pressed. Just call escape_pressed() periodically from your procedure, and if TRUE is returned, abort.
BOOL escape_pressed() // return TRUE if escape pressed
{
MSG msg;
// check for messages and remove from queue
if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) && msg.message == WM_KEYDOWN)
{
if (VK_ESCAPE == msg.wParam) // escape pressed
return TRUE;
}
return FALSE;
}
One issue is that calling escape_pressed causes the wait cursor to go away.
To resolve this, just call Restore as follows:
CWaitCursor hg; // show wait cursor...from inside a loop doing a lengthy computation
if (escape_pressed() )
{
break;
}
else
{
// restore wait cursor. escape_pressed() causes wait
// cursor to go away
hg.Restore();
}

Comments
There are no comments yet. Be the first to comment!