Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как открыть последний документ 
:(
    Опции темы
Гость_wert
Дата 13.1.2006, 14:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всем здрасьте.

У меня имеется :
W2k, VC++6.0, MFC, SDI.

Вопрос:
Что нужно сделать, что бы при запуске программы открывался последний документ, который юзали
перед закрытием проги.

Спасибо.

  Вверх
Earnest
Дата 13.1.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Ты должен запрограммировать это сам: запомнить файл (в реестре или ini-файле), прочитать из реестра при запуске программы и открыть через OpenDocumentFile. Готового механизма в MFC нет, есть лишь некоторые вспомогательные классы, которыми ты можешь воспользоваться. Это CRecentFileList (этот объект живет в CWinApp), функция CWinApp::LoadStdProfileSettings, функции того же CWinApp по поддержке MRU-файлов. MRU-файлы не имеют прямого отношения к загрузке последнего использованного документа, но удобнее всего реализовывать это через них (почти все готово), только вызвать в нужных местах.
Кстати не забудь, что хорошо воспитанный разработчик не загружает последний файл, если приложение запущено с опциями командной строки, которые этому противоречат (скажем, с именем файла). smile


--------------------
...
PM   Вверх
AlexPro
Дата 13.1.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 9.11.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 4



Цитата(Earnest @ 13.1.2006, 20:22 Найти цитируемый пост)
Готового механизма в MFC нет

Не совсем так. Если используется документ-вид, то каркас приложения делает всю работу по сохранению списка последних открытых файлов (результаты этой работы мы видим в меню "File"). Нам остается только прочитать из реестра имя последнего открывавшегося документа и попытаться его загрузить. Вот кусок кода, который я использую для этой цели:
Код

HKEY hKey;
TCHAR szLastCatalog[MAX_PATH];
DWORD dwBufLen(MAX_PATH);
if (RegOpenKeyEx(HKEY_CURRENT_USER,
  _T("Software\\MyFirm\\MyProgramm\\Recent File List"),
  0, KEY_QUERY_VALUE, &hKey )== ERROR_SUCCESS)
{
  if(RegQueryValueEx(hKey, _T("File1"), NULL, NULL,
    (LPBYTE)szLastCatalog, &dwBufLen)== ERROR_SUCCESS)
  {
    OpenDocumentFile(szLastCatalog);
  }
  RegCloseKey( hKey );
}

Если не используется связка документ-вид - таки да, все придется делать ручками.
Если использовать CRecentFileList (а точнее theApp.m_pRecentFileList) - будет еще проще, т.к. список файлов уже загружен. Пожалуй, использовать CRecentFileList в данном случае будет правильнее.

Это сообщение отредактировал(а) AlexPro - 13.1.2006, 21:30
PM MAIL   Вверх
Гость_wert
Дата 14.1.2006, 13:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(AlexPro @ 13.1.2006, 21:05 Найти цитируемый пост)
Пожалуй, использовать CRecentFileList в данном случае будет правильнее.

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

Цитата(Earnest @ 13.1.2006, 20:22 Найти цитируемый пост)
Кстати не забудь, что хорошо воспитанный разработчик не загружает последний файл, если приложение запущено с опциями командной строки, которые этому противоречат (скажем, с именем файла).

Earnest, спасибо, учту.


  Вверх
AlexPro
Дата 14.1.2006, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 9.11.2005
Где: Санкт-Петербург

Репутация: 3
Всего: 4



В InitInstance после всех функций инициализации нужно добавить следующий код:
Код

// Грузим поледний документ
if (!m_pRecentFileList->m_arrNames->IsEmpty())
  OpenDocumentFile(m_pRecentFileList->m_arrNames[0]);

Ну и, как сказала Earnest, нужно проверить командную строку на предмет наличия в ней названия документа.
PM MAIL   Вверх
Гость_wert
Дата 14.1.2006, 19:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











AlexPro, спасибо огромное. То, что доктор приписал. smile
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.