Иногда, в общих диалогах, таких как 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. |