Вопрос

Вопрос:

Кто-нибудь знает, как изменить текущий каталог уже запущенного диалогового окна "Открыть файл"?

Подробные сведения:

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

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

Я хотел бы добавить это поведение обратно.Я могу определить, когда это происходит, с помощью процедуры hook.Я спрятал кнопку "ОК", выключил акселератор и поместил свою собственную кнопку "выбрать" на панели управления.Это означает, что единственный раз, когда я получаю сообщение CDN_FILEOK, - это когда пользователь нажимает enter в текстовом поле после ввода.

Однако я не могу понять, как программно указать диалоговому окну изменить текущий каталог.

Я думал, что я мог бы достичь этого, отправив какое-то сообщение элементу управления SHELLDLL_DefView в окне, но я не смог найти никакой документации по нему.

Это было полезно?

Решение 2

Мне удалось найти обходной путь.

Оказывается, когда проверка отключена, ввод имени каталога, которое заканчивается на "\", все равно изменит отображаемую папку, но ввод имени каталога, которое не заканчивается на "\", не изменит.

Используя spy ++, я смог увидеть, что при нажатии enter сообщение WM_COMMAND будет отправлено общему элементу управления диалогового окна с аргументом wParam, слово высокого порядка которого - BN_CLICKED, а слово низкого порядка - ID_OK.

Если я создам подкласс общего диалогового окна, я могу перехватить сообщение, изменить текст в поле со списком имя файла, переслать сообщение в исходную процедуру подкласса, а затем изменить текст обратно.

Это небольшой взлом, но он позволяет мне получить желаемое поведение из диалогового окна.

Другие советы

Я не уверен в прямом ответе, но если у вас есть SPY ++ или любая другая программа отслеживания сообщений, попробуйте проверить сообщения, которые появляются при изменении каталога обычного диалогового окна OpenFileName.Возможно, вы найдете ответ там (хотя это трудный выход).

Хотя кто-то другой, возможно, знает ответ сразу;будем надеяться, что они это сделают.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top