Специальные службы 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.