Как обновить список файлов в общих диалогах
Иногда, в общих диалогах, таких как File Open или Save
As необходимо обновить список файлов не закрывая
диалога. Сделать это можно путём эмулирования
двойного щелчка по списку директорий. Можно
конечно отправить сообщение из любого другого
приложения, однако, чтобы отправить сообщение
диалогу, надо использовать процедуру ловушки.
Функции общих диалогов для обновления списка
файлов и директорий являются встроенными в общие
диалоги, поэтому недоступны для приложений,
работающих с подпрограммами общих диалогов. Эти
функции срабатывают только когда пользователь
сделает двойной щелчёк по списку.
Пример кода
Следующий код использует кнопку Cancel общего
диалога для обновления списка:
BOOL CALLBACK __export FileOpenHook (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
switch(wParam)
{
// Далее эмулируем двойной щелчёк на списке директорий,
// заставляя диалог по новой считать текущую директорию
// с файлами и обновить список файлов.
case IDCANCEL :
PostMessage( hDlg, WM_COMMAND, lst2,
MAKELPARAM(GetDlgItem(hDlg, lst2),
LBN_DBLCLK);
return TRUE;
}
break;
}
return FALSE;
}
Если приложение для платформы Win32, то
уведомительное сообщение отправляется немного
подругому; ниже приведён код PostMessage для
приложений Win32:
PostMessage (hDlg, WM_COMMAND, MAKEWPARAM (lst2,LBN_DBLCLK),
(LPARAM)GetDlgItem (hDlg, lst2));
Приложения, использующие ID элементов
управления общего диалога должны включать файл
DLGS.H.
Шаблоны для общих диалогов находятся в
директории \SAMPLES\COMMDLG либо в директории \INCLUDE
дистрибутива Windows SDK.
|