Есть ли что-то вроде 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
сообщение вместо