Как включить AfxMessageBox Да / Нет (MB_YESNO) кнопку «Закрыть»? (верхний правый угол "X") - PullRequest
5 голосов
/ 01 мая 2009

При звонке:

AfxMessageBox(strMsg, MB_YESNO);

Отображается окно сообщений с кнопками «Да» и «Нет». Но «X» (кнопка закрытия) в правом верхнем углу отключена, и нажатие ESC не имеет никакого эффекта.

Это потому, что единственными действительными результатами будут IDYES и IDNO, а не IDCANCEL.

Есть ли быстрый способ включить это поведение? Чего я хотел бы избежать:

  • Создание собственного диалога для этого.
  • Наличие кнопок да / нет / отмена.

В Vista, при удалении файла, диалоговое окно с запросом подтверждения имеет только «Да» и «Нет» и также может быть отменено кнопкой закрытия или ESC. Я предполагаю, что это пользовательский диалог.

Ответы [ 2 ]

4 голосов
/ 01 мая 2009

AfxMessageBox () просто вызывает MessageBox () внутри. Итак, нет, вы не можете получить желаемое поведение без использования MB_YESNOCANCEL, который добавляет кнопку ...

1 голос
/ 06 мая 2009

Не sre, если это делает, но бесплатно XMessageBox Ханса Дитриха - очень многофункциональное расширение стандартного окна сообщения. Вы можете захотеть проверить это.

Кроме того, я не совсем понимаю, почему вы не хотите, чтобы кнопка Отмена все же хотела элемент пользовательского интерфейса, который делает то же самое, но не совсем так явно.

Редактировать: Отвечая на ваш комментарий:

Если «Нет» взаимозаменяемо с «Отмена», то я думаю, что «Нет» - плохой выбор для маркировки. например: Q задается функцией DeleteFolder ():

«Должен ли я также очистить вложенные папки?». Очевидно, что no и Cancel / Escape не имеют одинакового значения.

OTOH, "Удалить файлы?" похоже кнопки должны быть Да / Нет. Но я предпочитаю ОК / Отмена. Потому что вы запрашиваете подтверждение пользователя, а не дополнительную информацию от пользователя. В таком случае наличие клавиши Escape / красного креста на работе, безусловно, является плюсом.

...