GetOpenFileName изменить каталог - PullRequest
1 голос
/ 22 января 2009

Вопрос:

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

подробности:

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 22 января 2009

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

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

0 голосов
/ 23 января 2009

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

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

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

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

Это немного взломать, но это позволяет мне получить поведение, которое я хочу из диалога.

...