Есть ли что-то вроде CDN_FILECANCEL, аналогичное CDN_FILEOK, для получения, когда пользователь выбирает Отмена в GetOpenFileName()?

По кросс-платформенным причинам, мой GetOpenFileName() не указывает владельца, и я явно отключаю все окна верхнего уровня. Проблема в том, чтобы снова включить. Чтобы правильно включить эти окна, мне нужно включить их до закрытия диалогового окна.

В случае, если пользователь выбирает файл, это не проблема: я просто проверяю CDN_FILEOK в процедуре подключения. Нет проблем, нет перепутанного внимания.

Как я могу сделать то же самое, но для отмены диалогового окна?

я пытался WM_DESTROY в процедуре подключения, но она запускается после того, как диалоговое окно было скрыто (слишком поздно). я пытался WM_COMMAND, но это, кажется, не охватывает все случаи. Я не уверен, какие еще варианты у меня есть.

Мне нужно ориентироваться на Windows XP и новее; это также означает, что нет общих элементов диалога. Спасибо!

Альтернатива: если бы был способ сделать обратный вызов GetOpenFileName() который вернул управление моей петле сообщений, как в Mac OS X с beginSheetModalForWindow:Я мог бы указать родительское окно и избежать этого взлома.

1 ответ

Решение

При отмене диалога уведомление о CDN отсутствует. Если пользователь нажимает кнопку "Отмена", вы можете попытаться перехватить BN_CLICKED уведомление о том, что оно отправляет в диалог или даже подкласс самой кнопки. Но если пользователь отменяет диалог другими способами (щелкнув по красному значку X, нажав ESC и т. Д.), Вам, вероятно, придется поймать WM_CLOSE сообщение вместо

Другие вопросы по тегам