Поделиться через


Специальные службы CWinApp

Помимо выполнения цикла обработки сообщений и давать возможность инициализации приложения и очистить после него, CWinApp предоставляет несколько других служб.

Регистрация оболочки

По умолчанию с помощью мастера приложений MFC делает возможным для пользователя открыть файлы данных, чтобы приложение ", дважды щелкнув их в проводнике или файловом менеджере. Если приложение MDI и указать расширение для файлов, приложение создается с помощью мастера приложений MFC добавляет вызовы методов RegisterShellFileTypes и функции-члены EnableShellOpenCWinApp в InitInstance переопределяют, записывает автоматически.

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

EnableShellOpen выполняет процесс приложения, предоставляя возможность доступа к командам DDE из проводника или файлового — открыть файл выбранный пользователем.

Эта поддержка автоматической регистрации в CWinApp исключает необходимость сделать reg-файла вместе с приложением или рабочими специальной установки задачи.

Если требуется инициализировать GDI+ для приложения (путем вызова GdiplusStartup в функции InitInstance ), необходимо отключить фоновый поток GDI+.

Это можно сделать, параметр SuppressBackgroundThread члена структуры GdiplusStartupInput в TRUE. Подавляя фоновый поток GDI+, NotificationHook и NotificationUnhook (см. GdiplusStartupOutput) должны быть выполненные только до вставки и оставить цикл обработки сообщений приложения. Поэтому рекомендуется начать ознакомление с раздела для вызова GdiplusStartup и функции уведомления обработчика, будут находиться в переопределении виртуальной функции CWinApp::Run, как показано ниже:

int CMyWinApp::Run()
{
   GdiplusStartupInput gdiSI;
   GdiplusStartupOutput gdiSO;
   ULONG_PTR gdiToken;
   ULONG_PTR gdiHookToken;

   gdiSI.SuppressBackgroundThread = TRUE;
   GdiplusStartup(&gdiToken,&gdiSI,&gdiSO);
   gdiSO.NotificationHook(&gdiHookToken);
   int nRet = CWinApp::Run();

   gdiSO.NotificationUnhook(gdiHookToken);
   GdiplusShutdown(gdiToken);

   return nRet;
}

Если не отключаются фоновый поток GDI+, команды можно DDE преждевременно проблему в приложение до его главное окно было создано. Команды DDE выданные оболочкой можно преждевременно прервать, и в сообщениях об ошибках.

Файловый менеджер перетаскивания

Файлы можно перетаскивать из окна представления файла файлового менеджере или проводника в окно в приложении. Можно, например, включить один или несколько файлов, перетащенным в главное окно приложения MDI, где приложение может получить имена файлов и открыть дочерние окна MDI для этих файлов.

Чтобы включить файл перетаскивания в приложении с помощью мастера приложений MFC записывает вызов функции-члены DragAcceptFilesCWnd для основного фреймового окна в InitInstance. Можно удалить этот вызов, если не нужно реализовать функцией перетаскивания.

Примечание

Также можно реализовать наиболее общий перетаскивания возможность- при перетаскивании данных или в документ- с OLE.Дополнительные сведения см. в статье Перетаскивание OLE ().

Отслеживать последних использовавшийся ся документов

По мере того, как пользователь открывает и закрывает файлы, объект приложения следит за 4 последних использовавшийся ся файлов. Имена этих файлов добавляются в меню "Файл" и обновляются при изменении. Платформа эти имена файлов хранятся либо в реестре, либо в INI-файле с таким же именем, что и проект, и считывает их из файла при запуске приложения. Переопределение InitInstance, мастер приложений MFC создается автоматически включает вызов функции-члены LoadStdProfileSettingsCWinApp, который загружает данные из реестра или INI-файла, включая последние использовавшийся ся имена файлов.

Эти записи хранятся следующим образом:

  • В Windows NT, Windows 2000 и более поздних версиях, значение сохраняется в раздел реестра.

  • В Windows 3.x, значение сохраняется в файле WIN.INI.

  • В Windows 95 и более поздних версиях, значение сохраняется в кэшированной версии WIN.INI.

См. также

Основные понятия

CWinApp: класс приложений