Разработка приложений для Internet

       

Метод OnOnTop


Метод OnOnTop во многом похож на уже описанный нами метод OnDblclkFtpLis, но используется не для входа, а для выхода из каталогов. Если вы вошли в каталог и желаете выйти из него на верхний уровень, вы должны нажать кнопку On top. В ответ на сообщение от этой кнопки вызывается метод OnOnTop. Он блокирует список IDC_FTP_LIST, вызывая метод EnableWindow для объекта m_FtpList, управляющего этим списком:

// Блокируем список IDC_FTP_LIST

m_FtpList.EnableWindow(FALSE);

Затем с помощью метода ReverseFind класса CString мы ищем последнее вхождение символа / в строке sCurentDirectory, содержащей имя текущего каталога сервера, содержимое которого показывается на экране.

Если метод ReverseFind не обнаруживает в строке с путем каталога символов /, он возвращает значение -1. Это означает что мы уже находимся в корневом каталоге сервера:

int iNum = sCurentDirectory.ReverseFind('/');

if(iNum == -1)

{

   // Если символ / не обнаружен, значит мы находимся в

   // корневом каталоге

   AfxMessageBox("No top directory");

}

Если же символ / найден, то обращаясь к методу Left мы удаляем все символы, расположенные справа от него (включительно). Таким образом, в строке sCurentDirectory теперь будет записан путь каталога верхнего уровня.



Так как мы изменили текущий каталог, содержимое которого показывается на экране, вызываем метод DirectoryView. Он просмотрит имена каталогов и файлов, расположенных по новому пути, и заполнит список:

else

{

   // Удаляем из строки с именем текущего каталога названия

   // последнего каталога

   sCurentDirectory = sCurentDirectory.Left(iNum);

   // Меняем форму курсора (курсор “ожидание”)

   CWaitCursor wait;  

  

   // Отображаем содержимое каталога верхнего уровня

   DirectoryView();  

}

Перед тем как вызывать метод DirectoryView, мы создаем объект wait класса CWaitCursor. При этом автоматически изменится внешний вид курсора приложения. Как только метод DirectoryView закончит свою работу и управление выйдет из блока else, объект wait будет удален, а внешний вид курсора восстановится.

После этого снимаем блокировку со списка IDC_FTP_LIST и отображаем новый текущий путь в поле IDC_STATUS:

// Снимаем блокировку списка IDC_FTP_LIST

m_FtpList.EnableWindow(TRUE);

// Отображаем на диалоговой панели новый путь каталога

m_Status.SetWindowText(sCurentDirectory);



Содержание раздела