Здравствуйте, sergmann, Вы писали:
S>К сожалению, этот флаг, видимо, является недокументированной особенностью, и его проверка действительно является хаком.
Документировано — никак

Если тебе нужно недокументированное знание, то DM_GETDEFID в случае установленного флага завершения всегда возвращает ноль. Это найдено в исходниках w2k. Можешь проверить для остальных систем, и если тоже справедливо — используй на свой страх и риск

у меня это работает на xp sp2 (даже если нет кнопок в диалоге вообще) Т.е. если не был вызван EndDialog, то DM_GETDEFID всегда возвращает не ноль (а именно — DC_HASDEFID + единица, т.е. IDOK)
case DM_GETDEFID:
pwndT1 = GetParentDialog(pwnd);
if (!PDLG(pwndT1)->fEnd && PDLG(pwndT1)->result)
return(MAKELONG(PDLG(pwndT1)->result, DC_HASDEFID));
else
return 0;
break;
Кроме DM_GETDEFID других бескровных путей я не нашёл.