Holy cow, I wrote a book!
A developer from another group within Microsoft
wanted to create a TaskDialog with
a progress bar,
but they couldn't figure out how to get rid of the Cancel button.
"Is there a way to remove all the buttons from a Task Dialog?"
users hate it when you give them a window that cannot be closed
What should the user do if the reticulation server stops responding?
Shut down the computer?
(Hey, at least shutting down the computer
will actually work.)
"The process usually takes around two seconds,
and we time out after ten.
In the case of timeout, we replace the progress dialog with
a failure dialog with the options Close and Retry.
But for this dialog, we just want to show the progress bar
so they know that we are doing something.
We have not yet finalized the design.
One design is to have a Cancel button on the progress dialog;
another is to remove the option to Cancel.
We're just investigating the possibility of the second option.
We haven't committed to it yet."
You should leave the Cancel button enabled,
and if the user clicks it,
then go straight to the "timed out" dialog.
Removing the Cancel button leaves the user trapped in a dialog box
with no escape route.
By an astonishing coincidence,
a few weeks after this email exchange concluded,
I happened to encounter the Reticulating Splines dialog,
and it got stuck,
and there was no Cancel button.
The frustrated user who got trapped with a window that could
not be closed or cancelled turned out to be me.